在C ++中将变量参数列表传递给基础构造函数

时间:2016-10-12 16:32:39

标签: c++ constructor variadic-functions

在C ++中是否可以将变量参数列表传递给基础构造函数?

我可以将基本构造函数的代码复制到派生类中,处理变量参数列表,但这会导致不需要的代码重复。

这是我到目前为止所尝试的:

class A{
public:
  A(const char * fmt,...){
    va_list ap;
    va_start( ap, fmt );
    vprintf(fmt,ap);
    va_end(ap);
  };
};

class B: public A{
public:
  B(const char * fmt,...):A(fmt){;};
};

int main(){
  B("%d\n",42);
}

但构造函数不会将变量参数传递给基类构造函数。

1 个答案:

答案 0 :(得分:7)

只需使用可变参数模板(并删除此C风格的东西):

struct A {
     template<typename ... Args>
     A(const char * fmt, Args&& ... args) {
          printf(fmt,std::forward<Args>(args) ...);
     };
};

struct B: public A {
  template<typename ... Args>
  B(const char * fmt, Args&& ... args) : A(fmt, std::forward<Args>(args) ...) {}
};

示例:

B("Print %d and %s",1,"hello");  //prints "Print 1 and hello"

DEMO