我正在开发一个 C++17 项目,我正在使用std::any
. 下面给出了一个最小的可重现示例,以供参考,解释我想要实现的目标。
#include <any>
#include <vector>
#include <iostream>
int main()
{
std::vector<int> vec{1,2,3};
std::any anything = vec;
// anything.push_back(4);//i want to add an element into vector vec, using variable anything but this statement won't work
std::cout<<std::any_cast<std::vector<int>>(anything).size()<<std::endl;//prints 3
std::any_cast<std::vector<int>>(anything).push_back(4);//this adds(push_back) element into rvalue
std::cout<<std::any_cast<std::vector<int>>(anything).size()<<std::endl;//prints 3 but i want 4
}
从上面的例子可以看出,我有一个std::any
对象,我正在使用std::any_cast
将元素添加到向量中。我想将元素添加到lvalue
名为 actual( ) 的向量vec
中,但将元素添加到rvalue
. 有没有办法将元素添加到名为vec
using的向量中std::any
。如果没有,那么还有其他方法可以做到这一点,例如使用std::variant
或其他我可能不知道的方法。我正在寻找一种在任何版本的 C++(如 C++11 或 C++17 等)中执行此操作的方法。
在我的实际项目中,需要存储任何类型的对象。所以我在那里遇到了同样的问题。然后意识到出了什么问题(即,我们push_back
在右值上使用),然后我将问题简化为一个最小的可重现示例并在这里问。