C++ 为在向量中调用模板初始化的模板类创建构造函数

C++ 为在向量中调用模板初始化的模板类创建构造函数,c++,templates,c++11,stdvector,C++,Templates,C++11,Stdvector,如果我想创建一个能够调用模板的构造函数(在类构造函数中)的模板类,这是一种方法吗?还是有更好的解决方案 template<typename T> class A{ public: A(int n): mVector(n) {} //normal constructor A(int n, auto a): mVector(n, T(a)) {} //constructor with template initialization priv

如果我想创建一个能够调用模板的构造函数(在类构造函数中)的模板类,这是一种方法吗?还是有更好的解决方案

template<typename T>
class A{
public:
    A(int n): mVector(n) {}                //normal constructor
    A(int n, auto a): mVector(n, T(a)) {}  //constructor with template initialization
private:
    std::vector<T> mVector;
};
模板
甲级{
公众:
A(int n):mVector(n){}//正规构造函数
A(int n,auto A):带模板初始化的mVector(n,T(A)){}//构造函数
私人:
向量向量向量机;
};

还有一种方法可以扩展任意数量的参数T(a,b,c,…),而不必为每种情况都使用构造函数吗?

也许您正在搜索:

template <typename... Args>
A(int n, Args&&... args) : // First argument should probably be std::size_t
    mVector(n, T(std::forward<Args>(args)...)) {}
模板
A(int n,Args&&…Args)://第一个参数可能应该是std::size\u t
mVector(n,T(std::forward(args)…){}

但是,您可以只取一个
常量&
,并期望调用者给您一个。

也许您正在搜索:

template <typename... Args>
A(int n, Args&&... args) : // First argument should probably be std::size_t
    mVector(n, T(std::forward<Args>(args)...)) {}
模板
A(int n,Args&&…Args)://第一个参数可能应该是std::size\u t
mVector(n,T(std::forward(args)…){}

但是,您可以只取一个
常量T&
,并期望调用者给您一个。

使用单参数构造函数时要小心,例如
a(int n)
。允许将
int
隐式转换为您的类型,例如
void f(A);f(33)是有效的代码。把它们说清楚。小心使用单参数构造函数,如
A(int n)
。允许将
int
隐式转换为您的类型,例如
void f(A);f(33)是有效的代码。把它们说清楚。