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

时间:2015-07-06 12:06:02

标签: c++ constructor variadic-functions

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

class Super {
public:
    Super(int num, ...);
...
}

现在,在我的子类构造函数中,我需要以某种方式调用这个超类构造函数,但是我该怎么做呢?通常情况下,通常不起作用:

class Sub {
public:
    Sub(int num, ...) : Super(???) { ... }
...
}

那么我应该投入什么而不是???

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

1 个答案:

答案 0 :(得分:8)

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

#include <iostream>
using namespace std;
class test {
    public:
    int cl;
};

int main()
{
  test *p;
  p=new(test);
  p->cl=5;
  return 0;
}

同样在这里:

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 */ }

你的派生类会执行相同的vapacking体操,然后使用超级构造函数的列表形式。

如果有一个数据成员只是为了构造扰乱你和你的类是可复制的或可移动的,你也可以放弃变量构造函数,而是有一个命名的静态成员函数来执行包装。