如何通过引用对象来初始化boost :: any?

kev*_*man 5 c++ boost-any c++11

我想存储对象中boost::any对象的引用.如何初始化boost :: any对象?我试过了std::ref(),但是boost::any初始化了std::reference_wrapper<>.例如,以下内容

#include <boost/any.hpp>
#include <cxxabi.h>
#include <iostream>

int main(void)
{
  int s;
  int i = 0;
  boost::any x(std::ref(i));
  std::cout << abi::__cxa_demangle(x.type().name(), 0, 0, &s) << "\n";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

版画

std::reference_wrapper<int>
Run Code Online (Sandbox Code Playgroud)

我想要boost::any包含int&而不是.

Die*_*ühl 5

boost::any班没有一个界面,允许这样的事情:你需要指定与构造函数的引用类型。我不认为您可以明确指定模板化构造函数的类型,因为我看不到任何可以粘贴它的地方。即使您可以显式指定模板参数,它也不会在 C++2003 中工作,因为没有可用的引用折叠并且参数被声明为采用 a T const&:您将尝试创建一个T& const&不会飞的。我认为你最好的选择是要么使用,std::reference_wrapper<T>如果你坚持一些看起来像远程引用的东西,或者只是使用T*.

也就是说,通常可以有一个类型类似于boost::any用于显式指定模板参数的模板化静态因子方法。但是,由于boost::any故意设计用于处理值类型,因此未完成。我有点怀疑是否也应该这样做:使用指针是非常好的选择。如果你真的需要一个引用类型,你可能必须自己实现它。