我想通过其成员返回值对两个自定义类对std :: variant类型的std :: vector进行排序.见下面的代码.
现在,使用
std::sort(std::begin(shapes), std::end(shapes), [](auto const& a, auto const& b){
return std::visit([](auto const& s) { return s.area(); }, a)
< std::visit([](auto const& s) { return s.area(); }, b);
});
Run Code Online (Sandbox Code Playgroud)
似乎确实有用,但它非常难看.由于std :: variants operator <对它们各自的值进行操作,我认为提供模板化比较运算符看起来会更好.但为什么它不起作用?
#include <algorithm>
#include <iostream>
#include <variant>
#include <vector>
constexpr double pi = 3.141592865;
struct Square {
double d{};
double area() const { return d * d; }
};
struct Circle {
double r{};
double area() const { return pi * r …Run Code Online (Sandbox Code Playgroud)