【发布时间】:2015-10-27 11:01:56
【问题描述】:
我有一个可变参数模板函数,除非我使用与T 相同类型的参数调用它。
template <typename T, typename... Arg>
std::shared_ptr<T> make_shared(Arg&&... arg)
{
return std::shared_ptr<T>(new T(std::forward<Arg>(arg)...));
}
工作电话:
auto sahredStr = make_shared<std::string>("fubar");
模棱两可的称呼:
std::string str = "fubar";
auto sharedStr = make_shared<std::string>(str);
我想了解第二次通话有什么问题。
【问题讨论】:
-
后者通过ADL找到
std::make_shared -
@PiotrSkotnicki 谢谢你:)
-
要么改名字,要么用
(make_shared<std::string>)(str)语法调用它 -
@PiotrSkotnicki 你可以回答这个问题,我会接受的。毕竟,你可能在我弄明白之前为我节省了相当长的时间:)