C ++ знает, вызывается ли функция-член - PullRequest
2 голосов
/ 02 августа 2020

Как я могу узнать, вызван ли метод, но очень рано?

Например, у меня есть структура Foo, которая имеет несколько настраиваемых членов:

struct Foo {
  int a;
  int b;

  Foo& setA(int a) {
    this->a = a;
    return *this;
  }

  Foo& setB(int b) {
    this->b = b;
    return *this;
  }
};

Теперь у меня есть функция, которая возвращает Foo И должна использовать ее немедленно, если больше нет вызовов функций-членов.

Например:

Foo getFoo() {
    static Foo foo;
    // <-- Here, I want to call some useFoo(foo) if no member functions are called
    return foo;
}

// This function is used like this:
getFoo().setA(3);
        ^-- here, we call setA so don't useFoo now

getFoo();
        ^-- but here, I want useFoo to be called automatically

1 Ответ

3 голосов
/ 02 августа 2020

То, что вы предлагаете в своем вопросе, физически невозможно; это нарушит причинно-следственную связь: вы не можете вызвать useFoo, если никакие функции-члены не были вызваны до , возвращая его и, возможно, используя его, потому что после его возврата вы можете использовать некоторую функцию-член.

Что вы можете сделать, так это вызвать useFoo из деструктора Foo, если флаг не был установлен, и установить этот флаг при каждом вызове функции-члена. Тем не менее, вам нужно позаботиться о том, как обрабатывать копии / перемещения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...