如何将std :: sort与没有复制构造函数的对象一起使用?

德鲁

我正在尝试对包含不能复制构造或默认构造(但可移动构造)的对象的向量进行排序,但是遇到关于编译器无法为其找到有效函数的错误swap我认为拥有一个移动构造函数就足够了。我在这里想念什么?

class MyType {
public:
    MyType(bool a) {}
    MyType(const MyType& that) = delete;
    MyType(MyType&& that) = default;
};

int main(void) {
    vector<MyType> v;
    v.emplace_back(true);
    sort(v.begin(), v.end(), [](MyType const& l, MyType const& r) {
        return true;
    });
}
虚拟软件公司

您需要显式定义移动分配运算符,因为这std::sort也是尝试的操作(不仅仅是移动构造)。请注意,由于存在用户提供的复制构造函数以及存在用户提供的移动构造函数(即使它们是-ed),因此禁止生成移动分配运算符的编译器delete例:

#include <vector>
#include <algorithm>

class MyType {
public:
    MyType(bool a) {}
    MyType(const MyType& that) = delete;
    MyType(MyType&& that) = default;
    MyType& operator=(MyType&&) = default; // need this, adapt to your own need
};

int main(void) {
    std::vector<MyType> v;
    v.emplace_back(true);
    std::sort(v.begin(), v.end(), [](MyType const& l, MyType const& r) {
        return true;
    });
}

Live on Coliru

滑动通过霍华德Hinnant(欣南特)(的主要贡献者在C ++ 11移动语义)是超级有用,以及第17项:理解特殊成员函数生成有效的现代C ++斯科特迈尔斯。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将JUnit参数化运行器与varargs构造函数一起使用?

有没有一种方法可以将椭圆对象与intersects()函数一起使用?

如何将Structuremap 3与对构造函数注入不友好的对象一起使用?

如何将xpcall与具有参数的函数一起使用?

我可以将std :: make_shared与没有参数构造函数的结构一起使用吗?

如何将@InjectMocks和initMocks()与具有必需String参数的对象一起使用?

如何将流与干扰方法和构造函数一起使用,为什么不使用.peek()?

如何将“ with”与对象列表一起使用

如何将mutate_at与多个函数(每个函数都有参数)一起使用?

如何将cudaMallocManaged与带有构造函数的对象一起使用

如何将函数接口与具有返回值的回调一起使用

如何将atomicModifyIORef与不纯函数一起使用?

没有重载函数“ std :: make_unique”的实例与参数列表匹配,但可与unique_ptr构造函数一起使用

如何将NULLIF与聚合函数一起使用

如何将Std :: set_terminate与SetUnhandledExceptionFilter一起使用?

如何将std :: find()与2d std:数组一起使用?

如何将std.prune()与函数一起使用?

如何将useState与对象一起使用?

如何将复制构造函数与基类一起使用?

如何将IN与块而不是对象一起使用?

C ++ 11:如何将std :: mem_fn和std :: bind与继承一起使用

如何将show与多个没有ID的元素一起使用

如何将ngRepeat与对象一起使用?

如何将关联对象与枚举一起使用?

如何强制执行复制省略,为什么它不能与已删除的复制构造函数一起使用?

如何将 processStrategy 与对象模式一起使用

如何将 std::bind 与 std::function 一起使用以便将方法作为回调传递?

如何将 JS Array.sort() 与具有不同属性的对象一起使用

如何将 Promise 与函数的输出一起使用?