C++ c++;使用va_arg调用超类构造函数

C++ c++;使用va_arg调用超类构造函数,c++,constructor,variadic-functions,C++,Constructor,Variadic Functions,我有一个基类,它包括一个带变量参数列表的构造函数: class Super { public: Super(int num, ...); ... } 现在,在我的子类构造函数中,我需要以某种方式调用这个超类构造函数,但是我该怎么做呢?通常的事情,自然是行不通的: class Sub { public: Sub(int num, ...) : Super(???) { ... } ... } 那么,我应该把什么代替? 我确实有另一个接受向量的构造函数,但拥有这样一个构造函数是客

我有一个基类,它包括一个带变量参数列表的构造函数:

class Super {
public:
    Super(int num, ...);
...
}
现在,在我的子类构造函数中,我需要以某种方式调用这个超类构造函数,但是我该怎么做呢?通常的事情,自然是行不通的:

class Sub {
public:
    Sub(int num, ...) : Super(???) { ... }
...
}
那么,我应该把什么代替


我确实有另一个接受向量的构造函数,但拥有这样一个构造函数是客户机的直接要求。

与任何变量函数一样,始终提供列表版本:

void foo(int a, ...) { va_list ap; va_start(ap, a); vfoo(a, ap); va_end(ap); }

void vfoo(int a, va_list ap) { /* actual implementation */ }
这里也一样:

#include <cstdarg>

struct Super
{
    Super(int num, ...) : Super(num, (va_start(ap_, num), ap_)) { va_end(ap_); }
    Super(int num, va_list ap);

private:
    va_list ap_;
};
#包括
超级结构
{
Super(int num,…):Super(num,(va_开始(ap_,num),ap_)){va_结束(ap_);}
超级(int num,va_list ap);
私人:
va_列表ap_;
};
派生类将执行相同的操作,然后使用超级构造函数的列表形式


如果仅仅为了构造而拥有一个数据成员让您感到不安,并且您的类是可复制的或可移动的,那么您也可以放弃变量构造函数,而是使用一个命名的静态成员函数来包装包。

您可以改为使用变量模板。我是@Barry的。您可能永远不应该使用C型变量参数;是否有一种方法不涉及成员
va_列表