考慮如下情況:
template<typename T>
class A { ... };
template<typename T, typename DataType = std::vector<A<T>>>
class B {
....
DataType data;
...
}
在我的情況下,DataType型別可以是任何標準“容器”,但它必須始終使用型別 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>>;
...
}
所以我會專門 B 喜歡B<int, std::vector>。當然它不能完全像這樣,因為container在這種情況下應該是一個完整的型別,然后必須是專門的。有沒有辦法用 c 14 實作這一點?
uj5u.com熱心網友回復:
您可以使用模板模板引數來完成,例如
template<typename T, template <typename...> typename container = std::vector>
class B {
using DataType = container<A<T>>;
...
};
然后像B<int>(ie B<int, std::vector>) 或B<int, std::deque>.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/428016.html
上一篇:使模板函式反映其模板引數的簽名
