ast*_*bia 8 c++ templates variadic-templates c++11
我是模板编程的新手,我有两个问题......希望有人可以帮助我.我试图使用可变参数模板生成另一个可变参数模板的新输入.换句话说,我有一堂课
template <std::size_t N, std::size_t... M>
class Class1 {
}
Run Code Online (Sandbox Code Playgroud)
我想使用N,M表示的整数值来生成一组新的std :: bitset类型输入到另一个模板类
template <typename T, typename... Ts>
class Class2 {
}
Run Code Online (Sandbox Code Playgroud)
所以例如,如果我使用Class1<10,20,25>我想在体内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>...>;
};
Run Code Online (Sandbox Code Playgroud)
然后
Class1<10, 20, 25>::rebind_with_type<Class2, std::bit_set>
// -> Class2<std::bit_set<10>, std::bit_set<20>, std::bit_set<25>>
Run Code Online (Sandbox Code Playgroud)
如果使用依赖名称调用它,请不要忘记typename/ template:
typename Class1<N, M...>::template rebind_with_type<Class2, std::bit_set>
// -> Class2<std::bit_set<N>, std::bit_set<M>...>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |