gpt4 book ai didi

c++ - 具有常量和非常量值的映射

转载 作者:行者123 更新时间:2023-11-28 04:35:11 25 4
gpt4 key购买 nike

我目前正在查看一些使用以下两种 map 类型实例的代码:

std::map<std::string, const Foo>;
std::map<std::string, Foo>;

Foo 的实现不相关。因此,所有将这两者之一的实例作为输入的函数都有它们的两个实现:一个用于 const Foo 版本,另一个用于非 const Foo 版本。

我的问题是:是否有可能使用模板创建一些东西(例如从 std::map 派生的类),这将允许我基本上封装上述类型的两个版本作为一个?

编辑:我知道我可能可以使用 SFINAE 只需要为每个相关函数编写一个版本,但我想知道是否有一种方法可以在“上游”进一步实现一些东西。

如果我的问题没有意义,我深表歉意 - 我不确定如何用合适的方式表达它。

最佳答案

可以通过这种方式实现可以接受 map 的 const 和非 const 版本的函数:

template <typename T_foo>
T_foo do_something_with_map(std::map<std::string, T_foo> & map)
{
std::cout << map["m"].i_ << std::endl;
return map["m"];
}

int main()
{
std::map<std::string, const Foo> m1;
Foo f1(1);
m1.emplace("m", f1);

std::map<std::string, Foo> m2;
const Foo f2(2);
m2.emplace("m", f2);

auto res1 = do_something_with_map(m1);
auto res2 = do_something_with_map(m2);
}

以 Foo 为例:

class Foo {
public:
Foo() = default;
Foo(int i)
: i_(i)
{}
int i_;
};

关于c++ - 具有常量和非常量值的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51663316/

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