gpt4 book ai didi

c++ - 根据模板参数的类型返回一个值

转载 作者:行者123 更新时间:2023-12-02 01:12:37 24 4
gpt4 key购买 nike

我有一个工作双向映射(一对一映射)类,如下所示:

template <typename T1, typename T2>
class BiMap
{
public:
void insert(const T1& a, const T2& b);
private:
std::map<T1, T2*> map1_;
std::map<T2, T1*> map2_;
};

我已经能够实现insert功能。现在我想实现一个 retrieve 函数,这样如果用户传递 T1 类型的值(例如 t1),它将返回 *map1_ [t1] 类似地,如果它们传递 T2 类型的值(例如 t2),它将返回 *map2_[t2]。可以保证类型 T1 不会与类型 T2 相同,那么如何通过检查其类型使其返回值?

最佳答案

如果您可以使用 C++17,您的检索函数将如下所示

template <typename T>
auto retrieve(T const& key)
{
static_assert(std::is_same_v<T, T1> || std::is_same_v<T, T2>, "Key type is not in map");
if constexpr (std::is_same_v<T, T1>)
return *map1_.at(key); // or whatever you actually want to return
else
return *map2_.at(key); // or whatever you actually want to return
}

如果你不能使用 C++17 那么我就写 2 个重载,比如

auto retrieve(T1 const& key)
{
return *map1_.at(key); // or whatever you actually want to return
}
auto retrieve(T2 const& key)
{
return *map2_.at(key); // or whatever you actually want to return
}

关于c++ - 根据模板参数的类型返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58548501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com