正如我們不能專注using
,我們必須去舊的方式與class
+ typedef
與using
最終將其暴露:
template<typename Key, typename Value, unsigned int N>
struct VarMapHelper
{
typedef std::map<Key, typename VarMapHelper<Key, Value, N-1>::type> type;
};
template<typename Key, typename Value>
struct VarMapHelper<Key, Value, 1>
{
typedef std::map<Key, Value> type;
};
template<typename Key, typename Value, unsigned int N>
using VarMap = typename VarMapHelper<Key, Value, N>::type;
這樣使用它:
VarMap<std::string, int, 3> map;
爲防止編譯器崩潰,如果誤用e類作爲VarMap<std::string, int, 0>
我們可以提供0的專業化:
template<typename Key, typename Value>
struct VarMapHelper<Key, Value, 0>
{
static_assert(false, "Passing variable depth '0' to VarMap is illegal");
};
你能舉一個例子說明如何使用這樣的類嗎? – Brian