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

use*_*414 0 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);
}
Run Code Online (Sandbox Code Playgroud)

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

dav*_*igh 8

只需使用可变参数模板(并删除这个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) ...) {}
};
Run Code Online (Sandbox Code Playgroud)

例:

B("Print %d and %s",1,"hello");  //prints "Print 1 and hello"
Run Code Online (Sandbox Code Playgroud)

DEMO