如何检查一个模板是否是另一个模板的 class 成员

How to check if a template is a class member of another template

我制作了一个按成员(例如学生按年龄或姓名)对向量进行排序的函数,所以我制作了一个模板函数

template<class ElemType, class ElemMember>
void sort(vector<ElemType>& vec, ElemMember member, bool ascending = true)
{
    for(int j = 0; j < vec.size()- 1; ++j)
        for (int i = 0; i < vec.size() - j - 1; ++i)
            if ((vec[i].*member < vec[i + 1].*member) ^ ascending)
                swap(vec[i], vec[i + 1]);
}

我想添加约束来检查 ElemType 是否是具有成员的 class 以及我的 ElemMember 是否是 class 的成员。

使用指向 ElemType 的数据成员的指针作为 sort 的参数应该足够了:

template <typename ElemType, typename MemberType>
void sort(std::vector<ElemType>& vec, MemberType ElemType::*member, bool ascending = true)
//                                    ~~~~~~~~~~~~~~~~~~~~~^

DEMO