gpt4 book ai didi

c++ - 如何获得对 boost::any 持有的数据的 const 引用?

转载 作者:行者123 更新时间:2023-11-30 01:46:31 25 4
gpt4 key购买 nike

在尝试通过 boost::any_cast 引用转换检索 boost::any 实例后,我无法保持 const 的正确性。

我的代码:

MyMap paramMapToSet;
MyMap& paramMap = &paramMapToSet;
const MyMap& constParamMap = &paramMapToSet;

A hoe;
paramMap.set(hoe, "structA");

// this works
A& hoeRef = paramMap.getByRef<A>("structA");
hoeRef.myInt = 101;
cout << paramMap.get<A>("structA").myInt << endl; // prints 101

// as well as this:
hoe = constParamMap.get<A>("structA");
cout << hoe.myInt << endl;

// and this:
const A& constHoeRef = paramMap.getByRef<A>("structA");
cout << constHoeRef.myInt << endl;

// however this doesn't work, why?? (error message below)
const A& constHoeRef = constParamMap.getByRef<A>("structA");
cout << constHoeRef.myInt << endl;

我也有点困惑,为什么只有最后一个版本会产生错误。我收到的错误消息是这样的:

C:...\boost_1_58_0\boost\any.hpp:284: error: C2440: 'return' : cannot convert from 'const nonref' to 'A &' Conversion loses qualifiers

第 284 行看起来像这样:

return any_cast<const nonref &>(const_cast<any &>(operand));

它是从下面一行调用的:

实现:

// a testing class:
struct A{
int myInt;
A() = default;
A(const A& other) : myInt(other.myInt)
{ cout << "Class A is being copied" << endl; }
};

// any-map implementation
class MyMap{
public:
template<typename T>
T get(const std::string& path) const
{
return any_cast<T>(data.at(path));
}

template<typename T>
const T& getByRef(const std::string& path) const
{
return any_cast<T&>(data.at(path)); // compiler originates the error from here
}

template<typename T>
T& getByRef(const std::string& path)
{
return any_cast<T&>(data.at(path));
}

template<typename T>
void set(T val, const std::string& path)
{
data[path] = val;
}

private:
std::map<std::string, boost::any> data;
};

您可能认为 MyMap 提供了开箱即用的无用包装功能,但真正的实现具有 get/set 方法,可在内部 std::map 内自动创建嵌套映射,提供酷炫灵活的 DOM 类数据结构。

最佳答案

我只是在猜测,但肯定......

return any_cast<const T&>(data.at(path));
// ^^^^^^

……不是吗?

关于c++ - 如何获得对 boost::any 持有的数据的 const 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33084668/

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