使用可变参数模板(Variadic Templates)解决这个问题,其可以接受任意数量和类型的参数,并将它们打包在一起。我们可以通过对类实现可变参数的构造函数来解决此问题。以下是示例代码:
#include
#include
template
class Array
{
private:
std::vector m_array;
public:
// constructor for a single object
Array(const T& t) { m_array.push_back(t); }
// constructor with a parameter pack for any number of objects
template
Array(const T& t, Args... args): Array(args...)
{
m_array.push_back(t);
}
void print()
{
for (auto& elem : m_array)
std::cout << elem << " ";
std::cout << std::endl;
}
};
int main()
{
Array arr1(1, 2, 3, 4); // works
arr1.print();
Array arr2("hello", "world", "!"); // works
arr2.print();
return 0;
}
在示例代码中,我们首先定义了一个Array类,并声明了一个包含单个对象的构造函数。然后,我们实现了一个可变参数模板版本的构造函数,可以接受任意数量和类型的参数,并使用递归调用来逐个处理参数。在每个递归调用中,我们将第一个参数推送到向量中,然后将其余参数传递给递归调用。最终,我们得到了一个包含所有参数的向量,并可以按预期打印它们。