如何停止检查可变参数

How to stop checking for variadic arguments

我有一个 class 包含一个特定类型的向量,我想给它一个可变参数构造函数来向向量添加元素。

class MyClass
{
    std::vector<int> numbers;
    MyClass(int &x...)
    {
        va_list args;
        va_start(args, x);
        while(/*some condition, I'm not sure*/)
        {
            numbers.push_back(va_arg(args, int));
        }
        va_end(args);
    }
};

我怎么知道什么时候停止检查参数?我的可变参数语法是否正确?我所要做的就是 cppreference.com.

上的可变函数教程

您不能使用 C 风格的变量参数列表,除非您以某种方式告诉函数它获得了多少参数。例如,您可以将 int count 作为第一个参数传递给可变参数列表,并使用此计数来确定何时停止处理参数。 printf() 等函数使用格式字符串来确定期望的参数数量(以及它们得到的类型)。

为您的 class 提供可变数量参数的最简单方法不是使用可变参数列表,而是使用 std:initializer_list<int>:

#include <initializer_list>
#include <vector>

class MyClass {
    std::vector<int> v;
public:
    MyClass(std::initializer_list<int> args): v(args) {}
};

可以这样使用:

MyClass object1{ 1, 2, 3, 4 };
MyClass object2({ 1, 2, 3, 4 });

如果您打算使用可变参数模板,构造函数的表示法将如下所示:

template <typename... T>
MyClass(T&&... args): v{ std::forward<T>(args)... } {}

但是,这可能会做一些细微的不同。我建议使用 std::initializer_list<int>.