class Parent {};
class Child : public Parent {};
class Foo
{
public:
Foo (Parent &) {};
template <typename T>
Foo (const T &);
};
int main ()
{
Child c;
Foo foo (c);
}
由于foo
的构造函数选择了template<typename T> Foo::Foo(const T &)
而不是Foo::Foo(Parent&)
,因此会产生链接错误。
如果c
的类型为Parent
而不是Child
,则使用非模板构造函数并且没有链接问题。
我可以通过以下方式解决这个问题:
Foo foo ((Parent&) c);
但我不想这样做。
C++为什么更喜欢使用模板来代替将c隐式转换为Parent&?
我能否更改类以倾向于强制转换而非使用模板,从而不需要解决方法?
Child
是Parent
的一种,但是它仍然没有与Parent&
直接匹配。因此,模板版本更适合匹配。 - Some programmer dudeFoo(Child&) {};
。 - user1810087