我有两组不同的类,它们继承自两个不同的基类(Value
和Token
)。
在这两个小组中,如果只有他们的名字与其他小组的班级名称没有冲突,我会拨打课程,我只需拨打String
,Number
,Name
。< / p>
所以基本上我需要一种方法来区分继承自String
的类Value
和继承自String
的类Token
,我不知道如何去做这个。
我不能将它们放在它们的基类的命名空间中,因为你继承了它们所在的同一个类,并且编译器给了我“无效使用不完整类型”错误。我该如何解决这个问题?
答案 0 :(得分:4)
简单的解决方案是将它们命名为$(function(){
var _token = $('meta[name="_jwt"]').attr('content');
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
jqXHR.setRequestHeader("your_jwt_token_header_name", _token);
});
});
和StringValue
。
您无法在其基类中定义它们,如:
StringToken
但可以在命名空间内定义和基类:
struct Value
{
struct String : Value {};
};
然后引用namespace Value
{
struct Base {};
struct String:Base {};
}
或Value::Base
。
虽然我非常喜欢名称空间,但在这种特殊情况下,我倾向于使用Value::String
解决方案。
(注意:我在示例中使用了StringValue
因为它保存了struct
的所有混乱。对于实际代码,您可能希望使用public
。)
答案 1 :(得分:2)
命名空间应该没有问题。
struct Value {};
struct Token {};
namespace Values { struct String : Value {}; }
namespace Tokens { struct String : Token {}; }
应该正常工作
namespace Values { struct Value {}; struct String : Value {}; }
namespace Tokens { struct Token {}; struct String : Token {}; }
一件不起作用的事情是
struct Value
{
struct String : public Value {};
};
因为当您尝试从中继承时Value
未完全定义
如果这就是你正在做的事情,那么解决办法就是不这样做。
答案 2 :(得分:1)
拨打一个StringValue
和另一个StringToken
?