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…()
可以将自己的输入参数传递给构造函数,并让编译器推断模板类型`