Как получить ссылку на объект из 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?

1

Решение

Основываясь на документации boost :: any, он всегда будет делать копию содержимого, которое вы ему предоставляете:

http://www.boost.org/doc/libs/1_58_0/doc/html/boost/any.html

См. Пункты 4 и 8 в разделе «Описание» для документации соответствующего конструктора и оператора присваивания.

0

Другие решения

Других решений пока нет …