首先是应该起作用的东西,然后是不起作用的东西。为什么不是这个问题。
我声明了两个类:
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);
它表示没有找到接受 share_ptr<Derived>
的匹配函数 foo(...)
首先,原始示例应该有效吗?其次,您认为第二个示例中的问题可能是什么 shared_ptr
到派生自专门基类的类。
最佳答案
我不认为编译器会以这种方式进行一定程度的间接寻址。相反,您可以将 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;}
关于C++ 将派生类 shared_ptr 传递给模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5385355/