3

私はいくつかのコードに取り組んでおり、1 回限りのソート機能を実行するセクションがあります。それを実装するには、 operator< 関数をオーバーロードするのが最も簡単だと判断しました。私がやりたいのは、ある種のboost::bind、boost::phoenix、lambda、またはその他のタイプの実装を使用して、ソートの実装を実際の呼び出しに近づけることです。残念ながら、私は新しい C++11 機能にアクセスできません。以下はサンプルコードです。

// In a header
struct foo
{
   char * a;
   char * c_str() { return a; }
}

// In a header
struct bar
{
    foo * X;          

    bar(foo * _X) : X(_X) {}
    bool operator < (const bar& rhs) const
    {
        return std::string(X->c_str()) < std::string(rhs.X->c_str());
    }
};

struct bars : public std::vector<bar> { ... some stuff  };

// Some other header
bars Bs;


// A cpp file
... other stuff happens that fills the Xs vector with objects

...::Function()
{
    // Current use and it works fine
    std::sort(Bs.begin(), Bs.end())

    // Would like something that accomplishes this:
    // std::sort(Bs.begin(), Bs.end(), 
    //   std::string(lhs.X->c_str()) < std::string(rhs.X->c_str()))

    // A non-working example of what I'm trying to do
    // std::sort(Xs.begin(), Xs.end(), 
    //     std::string((bind(bar::X->c_str(), _1)) <
    //     std::string((bind(bar::X->c_str(), _2)) )
}

メンバー ポインター、メンバー関数にアクセスし、結果をすべて boost::bind 関数内でキャストする方法を理解しようとすると、迷子になります。

ご協力ありがとうございました。

4

1 に答える 1