有没有办法将容器值传递给变异功能
Is there a way to pass container values to a variadic function?
我有一个模板变量函数:
template <typename ... argsType>
static bool Call(std::string const& Key, argsType&& ... Args)
{
/* ... */
}
这就是这样称为这样的:
Call("add2", 1, 2);
Call("add3", 1, 2, 3);
Call("true", true);
然后我也有不同的容器,数量有多个元素:
std::vector<int> v1 = {1, 2};
std::vector<int> v2 = {1, 2, 3};
std::vector<bool> v3 = {true};
现在有什么方法可以用这些容器的值调用variadic函数,还是我必须更改该函数,以便它接受容器作为参数?如果可能的话,我想做这样的事情:
Call("add2", /* use v1 here */);
Call("add3", /* use v2 here */);
Call("true", /* use v3 here */);
不,你不能。vector
中的元素数量是一个运行时数量,而传递给函数的参数数是编译时数量。将vector
解放到类似函数的唯一方法是通过巨型开关语句的内容:
switch (v.size()) {
case 0: Call("add2"); break;
case 1: Call("add2", v[0]); break;
case 2: Call("add2", v[0], v[1]); break;
// ...
}
可以在index_sequence
的帮助下生成,但前提是您知道v.size()
的限制实际上是什么。
您通常要做的就是通过一对迭代器:
template <class Iter>
static bool Call(std::string const& Key, Iter first, Iter last);
Call("add2", v.begin(), v.end());
或将其崩溃到 gsl::span
之类的东西中:
template <class T>
static bool Call(std::string const& Key, gsl::span<T> values);
Call("add2", gsl::span<int>{v});
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 变异模板中的功能顺序
- 我可以启用有关我自己的变异功能错误使用的指定符的警告
- 为什么只有C (和D语言)提供变异模板功能?是良好的变异模板
- 如何将std ::功能包装器转换为变异功能
- C 传递序列上范围为变异功能模板
- 有没有办法将容器值传递给变异功能
- 变异模板和变异功能组合
- 通过变异模板计算功能
- 如何绑定变异模板参数与功能
- C 矢量包装器围绕变异功能