c++ - boost::any 是可移动的吗?

标签 c++ boost boost-any

这段代码可以编译,但我认为它没有达到我的预期,即移动而不是复制 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/

相关文章:

c++ - 编译 libgdiplus 源代码以创建静态链接库,即 libgdiplus.so

python - 使用 Boost.Python 通过引用/指针将 C++ 对象传递给 Python 解释器

c++ - boost::线程生产者消费者

c++ - 计算表达式字符串由 std::map 中的键组成

c++ - boost::以下代码的任意替换

c++ - std::unordered_map<boost::any, boost::any> 抛出烦人的编译错误

c++ - std::any 是否使用类型删除、子类型化或多态性?

android - 是否可以为 Android Studio 创建仅使用 CMake 的项目?

c++ - 新项目 : I am having troubles picking a language to use

c++ - fastnlmeanfilter 链接错误