我该如何在具有模板构造函数的类上调用
make_shared
或make_unique
?以下是一个示例:class A
{
/// constructor shared ptr
A(shared_ptr<X> x) ...
/// constructor that creates new shared ptr
template <class T> A() : A(make_shared<T>(...)) {}
};
make_shared<A<T>>()
没有意义(也无法编译),因为这更适用于模板类,而不是模板构造函数。
make_shared<A><T>()
和make_shared<A>(<T>())
都无法编译---也不像它们应该那样。同样的问题也出现在make_shared<A, T>()
中。
有没有办法在调用make_shared
时指定构造函数调用的模板?我假设答案也适用于make_unique
;如果不是,请注明。谢谢!
(为了澄清模板如何工作,我编辑了代码。)
make_...
同样如此。 - Jarod42template <class T> A(T t) { ... }
。您无法在调用构造函数时指定模板值(new A<T>()
不允许),但编译器可以根据输入参数推断类型,例如:new A(value);
。这也适用于make_...()
函数。没有办法指定构造函数模板参数类型,但如果构造函数接受输入参数,则make...()
可以将自己的输入参数传递给构造函数并让编译器推断模板类型。 - Remy Lebeau