Nic*_*ini 4 c++ templates c++-templates
考虑如下情况:
template<typename T>
class A { ... };
template<typename T, typename DataType = std::vector<A<T>>>
class B {
....
DataType data;
...
}
Run Code Online (Sandbox Code Playgroud)
在我的例子中DataType,类型可以是任何std“容器”,但它必须始终专门针对类型A。A的使用对于类B之外应该是透明的,但是在没有默认类型的B的定义中DataType应该明确指定例如B<int, std::deque<A<int>>。我想消除这种可能性并实现类似的目标:
template<typename T, typename container = std::vector>
class B{
using DataType = container<A<T>>;
...
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以专注于 B 之类的B<int, std::vector>。当然它不能完全像这样,因为container在这种情况下应该是一个完整的类型,然后必须专门化。有没有办法用 c++14 来实现这一点?
您可以使用模板模板参数来做到这一点,例如
template<typename T, template <typename...> typename container = std::vector>
class B {
using DataType = container<A<T>>;
...
};
Run Code Online (Sandbox Code Playgroud)
B<int>然后像(ie B<int, std::vector>) 或 一样使用它B<int, std::deque>。
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |