c++ - 解包可变参数模板参数以定义新的模板参数
问题描述
我是模板编程的新手,我有两个问题......希望有人可以帮助我。我正在尝试使用可变参数模板为另一个可变参数模板生成新输入。换句话说,我有一堂课
template <std::size_t N, std::size_t... M>
class Class1 {
}
我想使用 N,M 表示的整数值来生成一组新的 std::bitset 类型输入到另一个模板类
template <typename T, typename... Ts>
class Class2 {
}
因此,例如,如果我使用Class1<10,20,25>
I want 在主体内部Class1
创建一个
Class2<std::bitset<10>, std::bitset<20>, std::bitset<25>>
变量。有没有使用 C++11 的简单方法?
那么我的第二个问题是如何进一步抽象这个,以便解包不是特定于std::bitset
类的?有没有办法修改Class1
模板定义,以便我可以扩展一些我开发的任意模板类,而不是std::bitset
?
解决方案
你可能会写这样的东西:
template <std::size_t N, std::size_t... M>
class Class1 {
template <template <typename, typename...> class C,
template <std::size_t> class inner>
using rebind_with_type = C<inner<N>, inner<M>...>;
};
接着
Class1<10, 20, 25>::rebind_with_type<Class2, std::bit_set>
// -> Class2<std::bit_set<10>, std::bit_set<20>, std::bit_set<25>>
如果使用依赖名称调用它,请不要忘记typename
/ template
:
typename Class1<N, M...>::template rebind_with_type<Class2, std::bit_set>
// -> Class2<std::bit_set<N>, std::bit_set<M>...>
推荐阅读
- sqlmap - 如何防止sqlmap在burpsuite中向http请求添加:433?
- go - Golang Colly Scraping - 网站验证码抓住了我的刮擦
- amazon-web-services - 通过 ApplicationLoadBalancedFargateService 中的 cdk 在 AWS Fargate 上启用 ExecuteCommand
- react-native - 如何根据在 react-native 中打开的页面更改我的图标颜色?
- jmeter - JMeter JMS 点对点采样器,将 JNDI 属性的值作为变量
- blockchain - 区块链和智能合约初学者
- reactjs - 在以多步形式前进和后退之后使用值的快照有什么意义?
- nestjs - Nestjs 错误在异常过滤器中的位置
- java - 使用 Spring JDBC 处理来自 PostgreSQL 的游标
- wordpress - 在 wordpress 或 elementor 中为按钮“仅登录”或“仅注销”功能设置