首先应该起作用的东西,然后是不起作用的东西。为什么不是这个问题。
我宣布了两个类:
class Base { ... };
class Derived : public Base { ... };
然后我在其他地方有以下功能:
void foo(shared_ptr<Base> base);
以下代码应该可以正常使用吗?
share_ptr<Derived> derived;
foo(derived);
现在,忘记上面的内容,我宣布了三个类:
class Foo { ... };
template <typename TYPE> class Base { ... };
class Derived : public Base<Foo> { ... };
在其他地方,我宣布一个模板化的函数:
template <typename TYPE> void foo(shared_ptr<Base<TYPE> > base);
以下代码不起作用:
shared_ptr<Derived> derived;
foo(derived);
它表示找不到匹配函数foo(...)接受share_ptr<Derived>
首先,原始示例应该有效吗?第二,你认为在第二个例子中我有一个shared_ptr
到一个派生自专门基类的类的问题。
答案 0 :(得分:1)
我认为编译器不会以这种方式通过间接级别。相反,您可以使用TYPE设置为Foo显式实例化foo。例如,以下通过g ++编译:
#include<boost/shared_ptr.hpp>
class Foo {};
template <typename T> class Base {};
class Derived : public Base<Foo> {};
template<typename T>
int foo(boost::shared_ptr<Base<T> > base) {return 0;}
boost::shared_ptr<Derived> derived;
int t = foo<Foo>(derived);
int main() {return 0;}
答案 1 :(得分:0)
这可能是复制和粘贴错误,但只是为了覆盖所有基础,您错过了share_ptr<Derived>
的'共享'中的'd'。