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&而不是.
该boost::any班没有一个界面,允许这样的事情:你需要指定与构造函数的引用类型。我不认为您可以明确指定模板化构造函数的类型,因为我看不到任何可以粘贴它的地方。即使您可以显式指定模板参数,它也不会在 C++2003 中工作,因为没有可用的引用折叠并且参数被声明为采用 a T const&:您将尝试创建一个T& const&不会飞的。我认为你最好的选择是要么使用,std::reference_wrapper<T>如果你坚持一些看起来像远程引用的东西,或者只是使用T*.
也就是说,通常可以有一个类型类似于boost::any用于显式指定模板参数的模板化静态因子方法。但是,由于boost::any故意设计用于处理值类型,因此未完成。我有点怀疑是否也应该这样做:使用指针是非常好的选择。如果你真的需要一个引用类型,你可能必须自己实现它。