好的,我所拥有的内容如下:
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::mpl
和obj
,但我觉得它正在改变上游来修复下游问题,所以我想我检查SO,看看人们是否能想出更聪明的东西。任何想法的家伙?选项#3是唯一的出路吗?
干杯!