这段代码可以编译,但我认为它没有达到我的预期,即移动而不是复制 boost::any
在堆栈上创建的对象到 std::vector<boost::any>
boost::any var;
var = std::string("StackOverflow");
std::vector<boost::any> vm;
vm.push_back(std::move(var));
for (auto& i : vm)
{
std::cout << boost::any_cast<std::string>(i) << std::endl; // yes a copy exists
}
std::cout << boost::any_cast<std::string>(var) << std::endl; // but this copy still exists too. was it not moved??
最佳答案
如果你查看 boost/any.hpp
并观察它的源代码(至少找到 move 词)你会发现它完全是 C++11没有意识到(不幸的是)!
所以你最好使用 boost::any::swap
来模拟移动分配(如果你仍然想使用 boost::any
完全没有)
关于c++ - boost::any 是可移动的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165692/