在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);
}
但构造函数不会将变量参数传递给基类构造函数。
答案 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"