考虑以下情况:
template<typename T>
class A { ... };
template<typename T, typename DataType = std::vector<A<T>>>
class B {
....
DataType data;
...
}
在我的情况下,DataType
类型可以是任何std“容器”,但它必须始终以类型A进行特化。对于类B外部的使用来说,A的使用应该是透明的,但是在没有为 DataType
指定默认类型的情况下,在定义B的时候,应该明确地指定如下: B<int,std :: deque<A<int>>
。我希望删除这种可能性,并实现类似以下的功能:
template<typename T, typename container = std::vector>
class B{
using DataType = container<A<T>>;
...
}
我希望能够像这样专门化B:B<int, std::vector>
,但实际上是不可能的,因为在这种情况下,container
应该是一个完整的类型,必须进行专门化。在C++14中有没有办法实现这个?
template <typename...> typename Container = std::vector
。但我质疑这是否是一个好主意,因为如果有人想传递带有自定义分配器的容器会怎样呢?等等。 - HolyBlackCat