我想修改一个现有的类构造函数:
template< typename T, typename... Ts >
MyClass( std::vector<T>& head, Ts& ...tail );
以便可以指定处理标志:
template< typename T, typename... Ts >
MyClass( MyEnum myEnum, std::vector<T>& head, Ts& ...tail );
这可以很好地工作,但是我想知道是否有一种方法可以将它指定为最右侧的参数,并可能使用默认值。我从来没有见过这样声明的可变模板,但话又说回来,我找不到任何明确说明它们不能这样做的东西。我试过了:
template< typename T, typename... Ts >
MyClass( std::vector<T>& head, Ts& ...tail, MyEnum myEnum );
...
MyClass myClass( dataA, dataB, dataC, MyEnum::VALUE );
但是编译器不喜欢它,我假设这是由于可变模板的解析方式,并且它们必须是最右边的参数?
这在C++11中是可能的吗?
发布于 2014-08-15 10:26:33
您可以将变量“包装”在std::tuple
中。
template< typename T, typename... Ts >
MyClass( std::vector<T>& head, std::tuple<Ts& ...> tail, MyEnum myEnum );
...
MyClass myClass( dataA, std::tie( dataB, dataC ), MyEnum::VALUE );
// NOTE: ^^^^^^^^^ ^
Live example (版本2)
https://stackoverflow.com/questions/25320366
复制相似问题