我应该如何命名这些类?
How should I name these classes?
我有两组不同的 classes,它们继承自两个不同的基础 classes(Value
和 Token
)。
在这两个组中,我都有 class 我会简单地称为 String
、Number
、Name
,只要他们的名字不与 class 其他组的名字。
所以基本上我需要一种方法来区分继承自 Value
的 class String
和继承自 [=12] 的 class String
=],我不知道该怎么做。
我不能将它们放在它们的基 class 的命名空间中,因为你继承自它们所在的同一个 class 并且编译器给我一个 "invalid use of incomplete type" 错误。我该如何解决?
呼叫一个 StringValue
和另一个 StringToken
?
简单的解决方法是将它们命名为 StringValue
和 StringToken
.
你不能在它们的基础 class 中定义它们,例如:
struct Value
{
struct String : Value {};
};
但是您可以定义它们和命名空间内的基础class:
namespace Value
{
struct Base {};
struct String:Base {};
}
然后参考Value::Base
或Value::String
.
虽然我非常喜欢名称空间,但在这种特殊情况下,我会倾向于 StringValue
解决方案。
(注意:我在示例中使用了 struct
,因为它避免了与 public
的所有混乱。对于实际代码,您可能想要使用 class
。)
这些命名空间应该没有问题。
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
没有完全定义。
如果这是你正在做的,解决办法就是不要那样做。
我有两组不同的 classes,它们继承自两个不同的基础 classes(Value
和 Token
)。
在这两个组中,我都有 class 我会简单地称为 String
、Number
、Name
,只要他们的名字不与 class 其他组的名字。
所以基本上我需要一种方法来区分继承自 Value
的 class String
和继承自 [=12] 的 class String
=],我不知道该怎么做。
我不能将它们放在它们的基 class 的命名空间中,因为你继承自它们所在的同一个 class 并且编译器给我一个 "invalid use of incomplete type" 错误。我该如何解决?
呼叫一个 StringValue
和另一个 StringToken
?
简单的解决方法是将它们命名为 StringValue
和 StringToken
.
你不能在它们的基础 class 中定义它们,例如:
struct Value
{
struct String : Value {};
};
但是您可以定义它们和命名空间内的基础class:
namespace Value
{
struct Base {};
struct String:Base {};
}
然后参考Value::Base
或Value::String
.
虽然我非常喜欢名称空间,但在这种特殊情况下,我会倾向于 StringValue
解决方案。
(注意:我在示例中使用了 struct
,因为它避免了与 public
的所有混乱。对于实际代码,您可能想要使用 class
。)
这些命名空间应该没有问题。
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
没有完全定义。
如果这是你正在做的,解决办法就是不要那样做。