相关疑难解决方法(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万
查看次数

具有多个模板参数包的部分模板专业化

继续我的可变模板世界之旅,我遇到了另一个问题.

假设以下模板类:

template < typename T >
struct foo 
{
    //default implementation
};
Run Code Online (Sandbox Code Playgroud)

它可以部分地专门用于变量模板实例化,如下所示:

template < template < typename ... > class T, typename ...Args >
struct foo< T< Args... > >
{
    //specialized implementation
};
Run Code Online (Sandbox Code Playgroud)

有了这个,foo< int >将对应于默认实现和foo< std::tuple< int, char > >专门的实现.

但是,使用多个模板参数时,事情会变得更加复杂.例如,如果我们有以下模板类

template < typename T, typename U >
struct bar {};
Run Code Online (Sandbox Code Playgroud)

我们想要像我们所做的那样对它进行部分专业化foo,我们做不到

template < template < typename ... > class T, typename ...TArgs,
           template < typename ... > …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates c++11

15
推荐指数
1
解决办法
4315
查看次数