Bas*_*sti 0 c++ templates variadic-templates
是否可以编写可变参数模板或折叠表达式,其中函数签名可以是这样的
void f(int, string, int, string, ...)
Run Code Online (Sandbox Code Playgroud)
这种风格在 Python 中非常流行且用户友好,但我无法在 C++ 中使用它。特别是,我会使用它来为绘图函数提供数据,后跟一个标签。
编辑:为了扩展,我想这样调用函数:
f(5, "first number");
f(5, "first number", 6, "second number");
Run Code Online (Sandbox Code Playgroud)
并带有 4、6 或 ... 2*n 个参数。
您可以编写这样的可变参数函数:
template<typename ...Ts>
void f(int data, string const &label, Ts&&... rest)
{
process(data, label);
f(std::forward<Ts>(rest...));
}
Run Code Online (Sandbox Code Playgroud)
使用基本情况:
void f() {}
Run Code Online (Sandbox Code Playgroud)
来终止递归。
现在只调用以下形式:
f(1, "hi"); // ok
f(1, "hi", 2, "bye"); // ok
// etc
Run Code Online (Sandbox Code Playgroud)
将编译,而:
f(1); // error
f("hi"); // error
f(1, "hi", 2); // error
Run Code Online (Sandbox Code Playgroud)
将不会。
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |