3
可能性の重複:私たちは、ポインタを使用する場合
C++ passing a derived class shared_ptr to a templated functionC++インスタンス化
は、コンパイラは、インスタンス化には問題がありません。
template <typename T> struct Base{
virtual ~Base() {}
};
template <typename T> struct Der: public Base<T> {
};
template <class T>
void f(Base<T>* b) {}
int main() {
Der<int> x;
f(&x);
}
ただし、shared_ptrsを使用するようにfを変更した場合、コンパイラは一致するものを見つけることができません。
shared_ptr<Base<int> > x(new Der<int>);
にXを変更
template <class T>
void f(shared_ptr<Base<T> >b) {}
int main() {
shared_ptr<Der<int> > x(new Der<int>);
f(x);
}
Z.cc: In function ‘int main()’:
Z.cc:45: error: no matching function for call to ‘f(std::tr1::shared_ptr<Der<int> >&)’
も動作します。 この動作の違いはなぜですか?
重複質問の答えに呼び出しfooのにはFooを追加すると、魔法のように物事が動作しますなぜ誰かが私に言うことはできますか? –
ATemp