Я пытаюсь написать функцию-член, которая по очереди вызывает другие функции-члены того же объекта, пока одна из них не заработает.
Я хотел бы написать это следующим образом:
class myClass
{
bool A() { return false; }
bool B() { return false; }
bool C() { return false; }
bool D() { return false; }
void doIt()
{
const QList<bool (myClass::*) ()> funcs({
&myClass::A, &myClass::B, &myClass::C, &myClass::D
});
bool result(false);
for (auto iter = funcs.cbegin(); !result && iter != funcs.cend(); ++iter)
{
result = this->(*iter) ();
}
}
};
Но я не могу получить правильный синтаксис для вызова моей функции через итератор. qt-creator отображает ошибку
called object type 'bool (myClass::*)()' is not a function or function pointer
, указывающую на вторую открывающую скобку, и g ++ сообщает
must use .* or ->* to call pointer-to-member function
, указывающую на вторую закрывающую скобку, обе в строке, где я назначаю результатв функции члена DoIt. (Обратите внимание, что примеры операторов в сообщении об ошибке g ++ заключены в серьезные акценты, но разметка удаляет «*», если я их включаю.)
Я могу найти любое количество примеров того, как вызывать указателидля функций-членов, но ничего с этой комбинацией сохранения указателей на функцию-член в коллекции и вызова в this