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

Pass variable argument list to base constructor in C++

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

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

这是我目前尝试的方法:

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);
}

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

只需使用可变参数模板(并放弃这种 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