最近我遇到了一些看起来像这样的代码:
Foo<SomeType> member;
...
void SomeFunc(Bar* bar);
...
SomeFunc(member);
我觉得很困惑。有人可以解释一下究竟发生了什么吗?
member
如何有效Bar*
?
Foo<SomeType>
是否以某种方式将指针类型子类化?
这是模板的一些属性吗?如果member
是Foo
而不是Foo<SomeType>
,是否还可以?
答案 0 :(得分:2)
会员如何成为有效的Bar *?
一种可能性是Foo<SomeType>
可转换为Bar*
。这可以通过Foo<SomeType>
中的user-defined conversion operator来实现。但我认为这种操作返回的Bar
指针在任何方面都不会有意义。也许,如果Foo<SomeType>
继承Bar
并且转化运算符返回this
,它可能会做一些有意义的事情,但这将是多余的和令人困惑的。
Foo会以某种方式将指针类型子类化吗?
没有。您不能继承基本类型。指针是基本类型。
这是模板的一些属性吗?
没有
如果会员是
,是否仍然可以Foo
而不是Foo<SomeType>
?
没有。类模板的实例是类。 Foo<SomeType>
是一个班级。这不是Foo
。变量不能将模板作为类型。