首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可变模板参数顺序,它们必须总是最右边的参数吗?

可变模板参数顺序,它们必须总是最右边的参数吗?
EN

Stack Overflow用户
提问于 2014-08-15 10:17:11
回答 1查看 1.7K关注 0票数 15

我想修改一个现有的类构造函数:

代码语言:javascript
复制
template< typename T, typename... Ts >
MyClass( std::vector<T>& head, Ts& ...tail );

以便可以指定处理标志:

代码语言:javascript
复制
template< typename T, typename... Ts >
MyClass( MyEnum myEnum, std::vector<T>& head, Ts& ...tail );

这可以很好地工作,但是我想知道是否有一种方法可以将它指定为最右侧的参数,并可能使用默认值。我从来没有见过这样声明的可变模板,但话又说回来,我找不到任何明确说明它们不能这样做的东西。我试过了:

代码语言:javascript
复制
template< typename T, typename... Ts >
MyClass( std::vector<T>& head, Ts& ...tail, MyEnum myEnum );

...

MyClass myClass( dataA, dataB, dataC, MyEnum::VALUE );

但是编译器不喜欢它,我假设这是由于可变模板的解析方式,并且它们必须是最右边的参数?

这在C++11中是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-15 10:26:33

您可以将变量“包装”在std::tuple中。

代码语言:javascript
复制
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)

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25320366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档