【发布时间】:2022-01-06 15:55:47
【问题描述】:
我正在尝试创建 std::set 的 pointers to data members。但是,我找不到对此类指针进行排序或散列的方法。
它们无法与operator< 进行比较,它们似乎不受std::less 的支持,并且没有标准的整数类型可以保证保持它们的表示形式(它们可能不适合std::uintptr_t) .
这是我首先尝试的 (https://godbolt.org/z/K8ajn3rM8):
#include <set>
struct foo
{
int x;
int y;
};
using t_member_ptr = int (foo::*);
const std::set<t_member_ptr> members = {
&foo::x,
&foo::y
};
它会产生错误error: invalid operands of types 'int foo::* const' and 'int foo::* const' to binary 'operator<'。完整的错误消息还暗示这发生在 std::less 的实例化期间。
我发现了一个类似的问题 (Set of pointer to member),但它可以追溯到 C++14,答案归结为“将指针放入向量中并改为执行线性搜索”。
C++17 或 C++20 是否有任何更改使得可以使用指向数据成员的指针作为标准关联容器的键?
【问题讨论】:
标签: c++ c++17 c++20 c++-standard-library data-member-pointers