読者です 読者をやめる 読者になる 読者になる

mem_find - メンバ変数検索アルゴリズム(ゲッター版)

C++


非公開メンバ検索用

ゲッターを使って検索します

ゲッターの形式は、

Type getter() const;

Type getter();

非constなゲッターって需要あるのかわかんないけど、とりあえず作った

template <class Iterator, class Target, class Type, class ClassName>
inline Iterator mem_find(Iterator first, Iterator last, const Target& target, Type (ClassName::*member)())
{
    while (first != last) {
        if (((*first).*member)() == target)
            break;
        ++first;
    }

    return first;
}

template <class Iterator, class Target, class Type, class ClassName>
inline Iterator mem_find(Iterator first, Iterator last, const Target& target, Type (ClassName::*member)() const)
{
    while (first != last) {
        if (((*first).*member)() == target)
            break;
        ++first;
    }

    return first;
}


使い方 ↓↓↓↓↓↓↓

class hoge {
    string name_;
public:																
    hoge(const string& name="") : name_(name) {}

    string get_name() const { return name_; }
};

int main()
{
    vector<hoge> v;

    v.push_back(hoge("Akira"));
    v.push_back(hoge("Johnny"));
    v.push_back(hoge("Sum"));

    if (mem_find(v.begin(), v.end(), "Akira", &hoge::get_name) != v.end())
        cout << "該当あり" << endl;
    else
        cout << "該当なし" << endl;

    return 0;
}


ライブラリまとめ