【发布时间】:2018-11-05 13:30:15
【问题描述】:
我有以下结构:
struct s0 {
char name[64];
s0* parent;
int stackLevel;
s0(s0* parent_, char* nameMask_, ...){
va_list args;
va_start(args, nameMask_);
vsprintf_s(name, 64, nameMask_, args);
va_end(args);
parent=parent_;
}
~s0(){}
};
struct s1 : s0 {
int p1;
s1(s0* parent_, int p1_, char* nameMask_, ...) : s0(parent_, nameMask_) {
p1=p1_;
}
}
我正在寻找一种让 s1 构造函数转发其可变参数的方法 到 s0 构造函数。我开始研究参数包和可变参数模板,但我只是看不出在这种情况下它是如何工作的。我正在寻找的东西是否可行?
【问题讨论】:
-
经典的“C”解决方案是有一个函数(或者,在你的情况下,s0 中的构造函数),它接受一个
va_list参数,就像 vsprintf 一样。然后 s1 构造函数可以调用它。您将需要 s0 中的通用(私有)“帮助器”方法,两个 s0 构造函数都可以调用该方法来共同使用va_list并执行实际工作的初始化代码。或者也许 s0 根本不需要可变参数构造函数,这取决于您的用例。标签variadic-templates在这里不合适,顺便说一句。你没有使用模板。 -
您使用的是可变参数函数,而不是可变参数模板。如果您询问如何将可变参数传递给另一个函数,则回答为here。
-
我看到 s0 'helper' 构造函数如何处理 va_list 参数,但这对我没有帮助,因为在我的应用程序中被其他类调用的 s1 构造函数是“...”论点。在将其传递给 s0 构造函数之前,如何将其处理为 va_list 参数,因为它位于同一行?
标签: c++ variadic-templates variadic