具有部分固定参数列表的 C++ 模板

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 来实现这一点?

son*_*yao 6

您可以使用模板模板参数来做到这一点,例如

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>