将变量参数列表传递给 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"
在 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"