gpt4 book ai didi

c++ - 如何使用对对象的引用来初始化 boost::any?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:17 25 4
gpt4 key购买 nike

我想在 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;
}

打印

std::reference_wrapper<int>

我想要 boost::any包含 int&相反。

最佳答案

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

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

关于c++ - 如何使用对对象的引用来初始化 boost::any?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8865153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com