考虑下一个例子:
template<typename T>
class A
{
public:
A(int p1, int p2, //any arguments needed for T constructor);
private:
std::vector<T> vec;
};
template<typename T>
A<T>::A(int p1, int p2, //any arguments needed for T constructor)
{
for(size_t i = 0; i < 10; ++i)
{
vec.push_back(T(//any arguments needed for T constructor))
{
}
我可以创建可以接受任何构造函数签名类型的类模板吗?
可以。
你也不需要循环
template<typename T>
class A
{
public:
template<typename... Args>
A(Args&&... args) : vec(10, T(std::forward<Args>(args)...)) {}
private:
std::vector<T> vec;
};
可以使用可变的模板参数pack
template<typename T>
class A
{
public:
template<typename... Args>
A(Args&&...);
private:
std::vector<T> vec;
};
template<typename T>
template<typename... Args>
A<T>::A(Args&&... args)
{
for(size_t i = 0; i < 10; ++i)
{
vec.push_back(T(args...));
}
}