Я работаю над некоторым кодом, и у меня есть раздел, в котором я выполняю функцию разовой сортировки. Чтобы реализовать это, я решил, что проще всего перегрузить операторную функцию. Я бы предпочел приблизить реализацию сортировки к фактическому вызову, используя какой-то тип 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.
Спасибо за помощь.