如何从 boost::any 获取对对象的引用?
How to get reference to object from boost::any?
我正在尝试从对对象的引用创建一个 boost::any,并在 boost::any_cast 之后在给定方法中更改它。但对象在调用后保持不变。这是我正在尝试的一个简单示例:
class Base
{
public:
template<typename T>
void method(T& data)
{
methodImpl(boost::any(data));
}
protected:
virtual void methodImpl(boost::any& data) = 0;
};
class Derived : public Base
{
private:
void methodImpl(boost::any& data)
{
Parameter& param = boost::any_cast<Parameter&>(data);
// Change param attributes...
}
};
int main()
{
Derived derived;
Parameter param;
derived.method(param);
// param hasn't changed...
}
有没有简单的方法让它工作,还是我必须使用 boost::ref 和 boost::reference_wrapper?
根据 boost::any 的文档,它将始终复制您提供的内容:
http://www.boost.org/doc/libs/1_58_0/doc/html/boost/any.html
有关相关构造函数和赋值运算符的文档,请参阅 "Description" 部分中的第 4 项和第 8 项。
我正在尝试从对对象的引用创建一个 boost::any,并在 boost::any_cast 之后在给定方法中更改它。但对象在调用后保持不变。这是我正在尝试的一个简单示例:
class Base
{
public:
template<typename T>
void method(T& data)
{
methodImpl(boost::any(data));
}
protected:
virtual void methodImpl(boost::any& data) = 0;
};
class Derived : public Base
{
private:
void methodImpl(boost::any& data)
{
Parameter& param = boost::any_cast<Parameter&>(data);
// Change param attributes...
}
};
int main()
{
Derived derived;
Parameter param;
derived.method(param);
// param hasn't changed...
}
有没有简单的方法让它工作,还是我必须使用 boost::ref 和 boost::reference_wrapper?
根据 boost::any 的文档,它将始终复制您提供的内容:
http://www.boost.org/doc/libs/1_58_0/doc/html/boost/any.html
有关相关构造函数和赋值运算符的文档,请参阅 "Description" 部分中的第 4 项和第 8 项。