我目前在我的代码中使用类似的东西:
class B : public A<C> { };
使用typedef不是更好吗?
typedef A<C> B;
答案 0 :(得分:16)
这取决于。如果您希望A<C>
和B
具有不同但相关的类型,B
应该扩展A<C>
。如果您希望它们相同,则应使用typedef
。你能提供更多背景吗?
答案 1 :(得分:4)
这取决于你想要什么。如果您使用不同的类来自定义模板元编程,则最好创建B
。
如果你使用继承只是为了减少输入而不是一个合适的解决方案而且你必须使用typedef
,那么它们就是为此而引入的。
答案 2 :(得分:2)
最明确的是,如果目的是为现有数据类型指定新名称,则使用typedef。
答案 3 :(得分:2)
它不完全一样。例如,使用typedef,您可以这样做:
typedef A<C> B;
func(B param) {...}
...
A<C> var;
func(var);
答案 4 :(得分:1)
好吧,我假设你正在使用空类来反复输入A<C>
。在这种情况下,我认为typedef是一个更好的主意。至少,这似乎是最常用的方式。
让我补充一点,这只是我的意见。一般来说,人们并不完全同意使用typedef。虽然我认为在这种情况下它很好。
在阅读Jon Purdy的回答之后,我想补充一点,如果你需要扩展A而不是其他,你应该使用继承。
答案 5 :(得分:1)
取决于你想要的,效果是不一样的。
C ++ typedef不是“强”,这基本上意味着B
和A<C>
属于同一类型。如果您希望能够区分这两者,请使用一个类。
可以在网络上找到各种强类型的实现,例如the boost one。
答案 6 :(得分:0)
为了完整性,我想补充一点:用
class B : public A<C> { };
你可以轻松地向前宣布B:
class B;
void func(B param);