问问题
4998 次
1 回答
10
在您的情况下,问题不在于可能从/到 different 的转换std::shared_ptr
,而是与模板函数的类型推断如何工作有关。
当编译器尝试将函数调用与模板匹配时,它将只接受完全匹配,即根本不接受类型转换。在这种情况下,您的函数采用 a std::shared_ptr<const T>
,而调用者采用std::shared_ptr<U>
where U
is not const
。因为匹配不是精确的,它会丢弃模板并选择下一个重载候选。
简单的解决方法是:完全避免类型推断并提供模板参数:
std::shared_ptr<A> p;
foo<A>(p); // will use the templated shared_ptr conversion
或者自己执行转换:
foo(std::shared_ptr<const A>(p));
于 2012-10-03T15:56:36.900 回答