分配指针的非指针? (在C ++中对指针类型进行子类化?)

时间:2015-11-29 08:49:38

标签: c++ function templates pointers types

最近我遇到了一些看起来像这样的代码:

Foo<SomeType> member;
...
void SomeFunc(Bar* bar);
...
SomeFunc(member);

我觉得很困惑。有人可以解释一下究竟发生了什么吗?

member如何有效Bar*

Foo<SomeType>是否以某种方式将指针类型子类化?

这是模板的一些属性吗?如果memberFoo而不是Foo<SomeType>,是否还可以?

1 个答案:

答案 0 :(得分:2)

  

会员如何成为有效的Bar *?

一种可能性是Foo<SomeType>可转换为Bar*。这可以通过Foo<SomeType>中的user-defined conversion operator来实现。但我认为这种操作返回的Bar指针在任何方面都不会有意义。也许,如果Foo<SomeType>继承Bar并且转化运算符返回this,它可能会做一些有意义的事情,但这将是多余的和令人困惑的。

  

Foo会以某种方式将指针类型子类化吗?

没有。您不能继承基本类型。指针是基本类型。

  

这是模板的一些属性吗?

没有

  

如果会员是Foo而不是Foo<SomeType>

,是否仍然可以

没有。类模板的实例是类。 Foo<SomeType>是一个班级。这不是Foo。变量不能将模板作为类型。