模板参数推演(多参数模板)

问题描述 投票:0回答:1

我需要创建自己的 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 ,这些特征将失败。

c++ templates metaprogramming
1个回答
0
投票

看起来您想要执行以下操作:

template <typename C, typename K = typename C::key_type, typename V = typename C::value_type>
class my_map {
private:
  std::map<K, V> items;
};

工作演示

© www.soinside.com 2019 - 2024. All rights reserved.