【发布时间】:2019-06-15 18:30:21
【问题描述】:
我正在尝试一些事情并提出以下问题:是否有可能在 std::any 中存储对值的引用?
我尝试了以下方法:
#include <any>
#include <iostream>
#include <functional>
auto func_by_pointer(std::any obj)
{
*std::any_cast<int *>(obj) += 2;
}
auto modify_by_pointer(int &a)
{
func_by_pointer(std::make_any<int *>(&a));
}
auto func_by_reference_wrapper(std::any obj)
{
std::any_cast<std::reference_wrapper<int>>(obj).get() -= 2;
}
auto modify_by_reference_wrapper(int &a)
{
func_by_reference_wrapper(std::make_any<std::reference_wrapper<int>>(a));
}
auto func_by_reference(std::any obj)
{
std::any_cast<int &>(obj) *= 2;
}
auto modify_by_reference(int &a)
{
func_by_reference(std::make_any<int &>(a));
}
int main()
{
auto value = 3;
std::cout << value << '\n';
modify_by_pointer(value);
std::cout << value << '\n';
modify_by_reference_wrapper(value);
std::cout << value << '\n';
modify_by_reference(value);
std::cout << value << '\n';
}
结果如下输出:
3
5
3
3
然而,我期待它是:
3
5
3
6
因此,将指针传递给value 可以正常工作。将std::reference_wrapper 传递给value 也可以正常工作,但传递int& 不知何故不起作用。我在代码中做错了什么,还是通常无法将引用存储在 std::any 中?
【问题讨论】:
-
顺便说一句,当您尝试从参考中创建
std::any时,您的编译器没有抱怨吗?当我尝试时,我的做了,所以我切换到指针。 (“医生,当我做这个时会很痛。”“那就不要做那个。”)然后寻找洞察力,我进行了搜索,将我带到了这里。