C++ 如何使用模板构造函数调用make_shared或make_unique
如何在具有模板构造函数的类上调用C++ 如何使用模板构造函数调用make_shared或make_unique,c++,templates,c++11,smart-pointers,make-shared,C++,Templates,C++11,Smart Pointers,Make Shared,如何在具有模板构造函数的类上调用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>(...)) {} }; A类 { //
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>(...)) {}
};
A类
{
///构造函数共享ptr
A(共享\u ptr x)。。。
///创建新共享ptr的构造函数
模板A():A(使_共享(…){}
};
make_shared()
没有意义(它也不会编译),因为这更适合于模板化类,而不是模板化构造函数
既不make_shared()
也不make_shared(())
compile--看起来也不应该。同上make_shared()
在调用make_shared
时,有没有办法指定构造函数调用的模板?我想答案应该适用于make_unique
;如果没有,请注明。谢谢
(为了澄清模板是如何工作的,我编辑了代码。)如果没有模板参数推断,根本无法使用类构造函数模板。因此,任何模板参数都必须从提供的参数中推导出来,而不是在调用时显式指定
这不限于任何
make.*
函数;这根本不是初始化对象的方法。无法调用该构造函数。您的编译器不必抱怨这个构造函数,但根本没有办法调用它。如何使用raw new调用它?。。。你不能。对于make_uu…
AFAIK,除非构造函数具有使用模板的输入参数:template a(T){…}
,否则无法对其进行模板化。调用构造函数时不能指定模板值(newa()
),但编译器可以根据输入参数推断类型,例如:newa(value)代码>。因此,它与make_……()
函数一起使用。无法指定构造函数模板参数类型,但如果构造函数接受输入参数,则make…()
可以将自己的输入参数传递给构造函数,并让编译器推断模板类型`