C++ Установить в качестве переменной члена класса с объектом функции класса

Мне нужно установить в качестве переменной члена класса, но также нужно, чтобы объект функции сравнения использовал атрибуты класса.

class Example
{
   int _member1;
   set<string, MyCmp> _myNameSet;

   class MyCmp
   {
      Example& myEx;

      MyCmp( const Example& ex) {
         myEx = ex;
      }

      bool operator() (const string& lhs, const string& rhs)
      {
         /// Use "_member1" here ...

         myEx._member1;

         /// Do something ....
      }
   }
};

Итак, вот мой вопрос: как передать объект Example в качестве аргумента конструктору MyCmp? Поскольку "_myNameSet" является переменной-членом.

Если бы это не была переменная-член, есть способ, который я знаю:

void Example::functionBlah()
{
   MyCmp obj(&(*this));
   set<String, MyCmp> myLocalSet(obj);
}

1 ответ

Решение

Вы можете использовать список инициализатора в конструкторе:

class Example
{
public:
    Example() : _member1(0), _myNameSet(this) {}

    Example(const Example&) = delete;
    Example& operator = (const Example&) = delete;

    // Other stuff
private:
   int _member1;
   set<string, MyCmp> _myNameSet;
};
Другие вопросы по тегам