::*
обозначает указатель на член .
С окружающим кодом это на самом деле Указатель на функцию-член .
Status_e(MyClass::*)(TupleInfo & info)
является функцией-членом class MyClass
, возвращающей Status_e
и имеющей один параметр TupleInfo&
. (Имя аргумента info
здесь бесполезно, но компилятор явно игнорирует его.)
Другой фрагмент в вопросе OP показывает, как его назвать:
status = (this->*m_processObjects[f])(m_tuples[i]);
Хранение указателя на метод будет выглядеть так:
std::vector<Status_e(MyClass::*)(TupleInfo & info)> m_processObjects;
...
m_processObjects.push_back(&MyClass::aMethod);
Конечно, подпись MyClass::aMethod
должна совпадать.
Упрощенный пример, чтобы продемонстрировать это:
#include <iostream>
#include <vector>
class Test {
private:
std::vector<int(Test::*)(const char*)> _tblTestFuncs;
public:
Test()
{
_tblTestFuncs.push_back(&Test::func1);
_tblTestFuncs.push_back(&Test::func2);
_tblTestFuncs.push_back(&Test::func3);
}
int func1(const char *caller) { std::cout << "Test::func1 called from '"<< caller << "': "; return 1; }
int func2(const char *caller) { std::cout << "Test::func2 called from '"<< caller << "': "; return 2; }
int func3(const char *caller) { std::cout << "Test::func3 called from '"<< caller << "': "; return 3; }
void call()
{
for (size_t i = 0, n = _tblTestFuncs.size(); i < n; ++i) {
int result = (this->*_tblTestFuncs[i])("Test::call()");
std::cout << "Return: " << result << '\n';
}
}
};
int main()
{
Test test;
// test method vector in main()
std::vector<int(Test::*)(const char*)> tblTestFuncs;
tblTestFuncs.push_back(&Test::func1);
tblTestFuncs.push_back(&Test::func2);
tblTestFuncs.push_back(&Test::func3);
for (size_t i = 0, n = tblTestFuncs.size(); i < n; ++i) {
int result = (test.*tblTestFuncs[i])("main()");
std::cout << "Return: " << result << '\n';
}
// test method vector in Test
test.call();
// done
return 0;
}
Выход:
Test::func1 called from 'main()': Return: 1
Test::func2 called from 'main()': Return: 2
Test::func3 called from 'main()': Return: 3
Test::func1 called from 'Test::call()': Return: 1
Test::func2 called from 'Test::call()': Return: 2
Test::func3 called from 'Test::call()': Return: 3
Демонстрация в реальном времени на coliru.com