概述
假设我有一个接受变量参数的模板函数,并使用这些参数调用其他函数...
template func(int i, A... args)
{
// do something common
switch (i)
{
case 0: x(args...); break;
case 1: y(args...); break;
case 2: z(args...); break;
default: break;
}
// do something common
}
......其他功能定义为......
void x(int a, int b);
void y(int a, int b); // note: takes same args as x()
void z(std::string a);
这不会编译,因为使用std :: string参数调用func()将找不到带有std :: string参数的x()和y()的匹配项 .
请注意,func()使用一些外部条件(在此示例中为参数i的值)来决定将参数args传递给哪个其他函数 .
有没有办法在不诉诸于将参数args填充到std:tuple并传递它的情况下将其拉出来?
[编辑]
好吧,我想出了一种适合我的目的的方法 . 这是一个示例类来说明......
class X
{
private:
bool a(int) { return true; }
bool b(int) { return true; }
template bool a(const A&...) { return false; }
template bool b(const A&...) { return false; }
public:
template void x(int i, const A&... args)
{
if (i == 0)
{
a(args...);
}
else
{
b(args...);
}
}
};
a()和b()的可变参数模板方法将捕获对X.x()的任何调用,其中参数不是单个int . 这解决了我收到的编译器错误,并启用了我正在寻找的更简单的类API .
最后
以上就是强健黄豆为你收集整理的java短信模板变量参数赋值_在C variadic模板中传递变量参数的全部内容,希望文章能够帮你解决java短信模板变量参数赋值_在C variadic模板中传递变量参数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复