我需要创建自己的 std::map 实现,但可以在仅使用一个模板参数创建键时推断出键的类型。
template <typename K, typename V>
class my_map {
...
private:
std::map<K, V> items;
}
上面的用法就像 std::map 一样,但是当我有这样的类时:
class mapped_class {
using key_type = std::string;
private:
std::string key;
double value;
}
我希望能够像这样实例化 my_map :
my_map<mapped_class> instance;
我尝试过部分专业化,但是当上述实例化成功时,它没有我提供给原始模板的实现。 我还尝试使用第二个模板参数默认提供一些特征,如果第一个模板参数(并且在实例化期间仅提供一个)未在其中定义 key_type ,这些特征将失败。
看起来您想要执行以下操作:
template <typename C, typename K = typename C::key_type, typename V = typename C::value_type>
class my_map {
private:
std::map<K, V> items;
};