相关疑难解决方法(0)

你如何迭代std :: tuple的元素?

如何迭代元组(使用C++ 11)?我尝试了以下方法:

for(int i=0; i<std::tuple_size<T...>::value; ++i) 
  std::get<i>(my_tuple).do_sth();
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

错误1:抱歉,未实现:无法将"Listener ..."扩展为固定长度的参数列表.
错误2:我不能出现在常量表达式中.

那么,我如何正确迭代元组的元素?

c++ iteration template-meta-programming c++11 stdtuple

92
推荐指数
12
解决办法
6万
查看次数

C++ 11索引模板参数包在运行时以访问第N类型

从这个SO主题(和这篇博文),我知道如何在模板参数包中访问第N类型.例如,上述SO问题的答案之一表明:

template<int N, typename... Ts> using NthTypeOf = typename std::tuple_element<N, std::tuple<Ts...>>::type;

using ThirdType = NthTypeOf<2, Ts...>;
Run Code Online (Sandbox Code Playgroud)

但是,这些方法仅在编译时起作用.尝试做以下事情:

int argumentNumber = 2;
using ItsType = NthTypeOf<argumentNumber, Arguments...>;
Run Code Online (Sandbox Code Playgroud)

会导致编译错误:

错误:非类型模板参数不是常量表达式

有没有办法在运行时访问第N类型?


这是我的用例:

我的程序读取一个文本文件,它基本上是一个数字数组.每个数字i指的是我的类基于模板化的模板参数包的第i种类型.基于该类型,我想声明该类型的变量并对其执行不同的操作.例如,如果它是一个字符串,我想声明一个字符串并进行字符串匹配,如果它是一个整数,我想计算一个数字的平方根.

c++ variadic-templates c++11

8
推荐指数
1
解决办法
1154
查看次数