指向成员函数的模板指针-getter

问题描述 投票:0回答:1

所以我正在做一个排序函数,我希望它根据我给的吸气剂对我的元素进行排序。问题是我的吸气剂是const,这就是为什么我当前的代码不起作用的原因。如果我删除const,则效果很好。

struct User {
    string name;
    string getX() const { return name; } //// doesnt work with this
    string getX() { return name; }       //// this works fine. but i need my getter to be const
};

template <typename ElemType, typename MemberType>
void _sort(std::vector<ElemType>& vec, MemberType(ElemType::* 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]);
}

int main()
{
    vector<User> a{ User{"Z"}, User{"E"}, User{"B"}, User{"R"}, User{"A"} };

    for (auto e : a)
        cout << e.name << " ";
    cout << endl;

    _sort(a, &User::getX);

    for (auto e : a)
        cout << e.name << " ";
    cout << endl;

    return 0;
}

如何使它与const吸气剂配合使用>

所以我正在做一个排序函数,我希望它根据我给的吸气剂对我的元素进行排序。问题是我的getter是const,这就是为什么我当前的代码不起作用。如果我删除const ...

c++ pointers templates getter member
1个回答
2
投票

只需将参数也设为const:

© www.soinside.com 2019 - 2024. All rights reserved.