【发布时间】:2013-05-02 01:54:49
【问题描述】:
MSVC 编译器存在一个已知错误,即未创建默认移动构造函数。
问题是我有很多类似于这样的类:
struct User {
std::string FirstName;
std::string LastName;
std::string Address;
std::string PostalCode;
std::string City;
std::vector<std::unique_ptr<ProjectBase>> Projects;
};
我如何学习这样的课程并将其转换为在这种情况下可以使用的东西:
std::vector<std::unique_ptr<User>> users;
{
// I use this logic often (create a temporary object and move it into stl container
auto new_user=make_unique<User>();
users.push_back(std::move(new_a));
}
users.back()->FirstName="Should";
users.back()->LastName="Work";
std::cout << "First Name: " << users.back()->FirstName << std::endl;
上述代码在 Windows Phone 8 中不起作用(因为没有移动构造函数),但可以与 Visual Studio 2012 (v110) 工具包一起使用。
如果我的 User 类具有移动构造函数以便与 Windows Phone 8 一起使用,它会是什么样子?
【问题讨论】:
-
有什么原因你创建了一个变量表单
make_unique而不是仅仅做push_back(make_unique<User>())? -
你试过
User(User &&) = default;吗? -
@VaughnCato:MSVC 还不支持。
-
确实缺少最重要的功能之一。如果没有一大堆样板,你甚至无法定义最简单的类型,那么到底谁需要可变参数模板或 constexpr 之类的东西? VS 团队,下次请从容易实现的目标开始。
标签: c++ c++11 windows-phone-8