多个不同类型的参数包

时间:2014-08-29 18:10:55

标签: c++ templates c++11 boost

好的,我所拥有的内容如下:

template< int... ints, class... classes >
magic_return_type<ints..., classes...> func() { \* snip *\ }

template< int... ints, class... classes >
class obj
{
public:
   obj() : x(func<ints, classes>()) {}
private:
   magic_return_type<ints..., classes...> x;
};

显然clang ++和g ++允许func使用多个参数包,但obj不能,因为我收到以下错误:

error: parameter pack 'ints' must be at the end of the template parameter list

对于此问题,您可以假设magic_return_type存在,并且“逻辑上正确”。 (它最终成为非玩具版本中某些东西的boost::fusion::vector

我看到的可能的解决方案/解决方法:

  • 找一些我不知道的神奇方式让它做我想做的事。
  • boost::mpl个对象传递给obj而不是参数包,这解决了obj的问题,但我不知道如何将它们转换为{{1的参数包}}。
  • func个对象传递给我不介意做的boost::mplobj,但我觉得它正在改变上游来修复下游问题,所以我想我检查SO,看看人们是否能想出更聪明的东西。

任何想法的家伙?选项#3是唯一的出路吗?

干杯!

0 个答案:

没有答案