c++ - 如何从 boost::any 获取对对象的引用?

标签 c++ boost reference type-erasure 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

有关构造函数和赋值运算符的文档,请参阅“说明”部分中的第 4 项和第 8 项。

关于c++ - 如何从 boost::any 获取对对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470742/

相关文章:

c++ - 如何将 cpp_dec_float_50 转换为 cpp_int?关于一般的 float ?

asp.net-mvc - 如何将 System.Web.Mvc 版本 5 添加到项目引用

c++ - undefined reference c++ 丢失

c++ - 模棱两可的模板怪异

c++如何使两个 vector 一个带有数据另一个指向并且只读

c++ - 使用 boost::chrono,如何从不同的年、月、日、小时、分钟、秒计算自纪元 UTC 以来的毫秒数

Perl:分配 [] 或 {} 是否昂贵?如何快速重置数字/关联数组?

c++ - C++ 中的类(cpp 文件和 h 文件)

c++ - 这个列表是垃圾内存吗?

c++ - 尝试链接 boost::filesystem 以调试 MSVC11 项目时出现链接器错误