gpt4 book ai didi

c++ - 添加具有模板特化的方法

转载 作者:行者123 更新时间:2023-11-30 03:29:39 26 4
gpt4 key购买 nike

我有一个名为 Map 的哈希表容器,其方法如下:

Value Map<Key, Value>::valueFor(const Key& key);

不幸的是,最常用的情况是Key = std::string,我们通常用字符串文字调用方法,例如:

const Value v = map.valueFor("my_key");

我们减少了一些创建 std::string 的周期。因此,我想添加一个重载

Value Map<std::string, Value>::valueFor(const char* key);

Key = std::string 时。我确信编译器甚至可以在编译时使用这样的签名计算哈希值,这也有助于加快速度。

有没有办法在 C++11 中做到这一点,而无需模板专门化整个 Map 类并重写所有方法?

最佳答案

您可以只添加另一个重载 valueFor(char const * key)。如果 Key 不是 std::string,您可能还想使用 SFINAE 禁用此重载。

#include <iostream>
#include <string>
#include <type_traits>

template < typename Key, typename Value >
struct Map
{
Value valueFor(Key const& key)
{
std::cout << "valueFor(const Key& key)\n";
return Value{};
}

template < typename _Key = Key,
typename = typename std::enable_if< std::is_same < _Key, std::string >::value >::type >
Value valueFor(char const * key)
{
std::cout << "valueFor(char const * key)\n";
return Value{};
}
};

int main()
{
Map<std::string, int> map;
int v = map.valueFor("my_key");

Map<int, int> other_map;
//int v = other_map.valueFor("my_key"); // BOOM!
}

关于c++ - 添加具有模板特化的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45560559/

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