#include <vector>
class SomeClass {};
template<typename USER_DATA>
class RowProcessor
{
typedef void (*RowFunction)(USER_DATA, std::vector<USER_DATA> &);
RowProcessor(RowFunction, int) {};
};
class UseRowProcessor {
public:
void AddUserData(SomeClass, std::vector<SomeClass> &);
void LoadUserData();
};
void UseRowProcessor::AddUserData(SomeClass c, std::vector<SomeClass> &v) {
v.push_back(c);
}
void UseRowProcessor::LoadUserData() {
RowProcessor<SomeClass> myRowProcessor(AddUserData, 1);
}
int main() {
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KCmNsYXNzIFNvbWVDbGFzcyB7fTsKCnRlbXBsYXRlPHR5cGVuYW1lIFVTRVJfREFUQT4KY2xhc3MgUm93UHJvY2Vzc29yCnsKICAgIHR5cGVkZWYgdm9pZCAoKlJvd0Z1bmN0aW9uKShVU0VSX0RBVEEsIHN0ZDo6dmVjdG9yPFVTRVJfREFUQT4gJik7CiAgICAgICAgCiAgICBSb3dQcm9jZXNzb3IoUm93RnVuY3Rpb24sIGludCkge307Cn07CgogICAgCiAgICAKY2xhc3MgVXNlUm93UHJvY2Vzc29yIHsKcHVibGljOgogICAgdm9pZCBBZGRVc2VyRGF0YShTb21lQ2xhc3MsIHN0ZDo6dmVjdG9yPFNvbWVDbGFzcz4gJik7CiAgICB2b2lkIExvYWRVc2VyRGF0YSgpOwp9OwoKdm9pZCBVc2VSb3dQcm9jZXNzb3I6OkFkZFVzZXJEYXRhKFNvbWVDbGFzcyBjLCBzdGQ6OnZlY3RvcjxTb21lQ2xhc3M+ICZ2KSB7CiAgICB2LnB1c2hfYmFjayhjKTsKfQoKdm9pZCBVc2VSb3dQcm9jZXNzb3I6OkxvYWRVc2VyRGF0YSgpIHsKCVJvd1Byb2Nlc3NvcjxTb21lQ2xhc3M+IG15Um93UHJvY2Vzc29yKEFkZFVzZXJEYXRhLCAxKTsKfQoKCgoKCgoKCmludCBtYWluKCkgewoJcmV0dXJuIDA7Cn0KCg==
prog.cpp: In member function ‘void UseRowProcessor::LoadUserData()’:
prog.cpp:26:55: error: no matching function for call to ‘RowProcessor<SomeClass>::RowProcessor(<unresolved overloaded function type>, int)’
RowProcessor<SomeClass> myRowProcessor(AddUserData, 1);
^
prog.cpp:26:55: note: candidates are:
prog.cpp:10:5: note: RowProcessor<USER_DATA>::RowProcessor(RowProcessor<USER_DATA>::RowFunction, int) [with USER_DATA = SomeClass; RowProcessor<USER_DATA>::RowFunction = void (*)(SomeClass, std::vector<SomeClass>&)]
RowProcessor(RowFunction, int) {};
^
prog.cpp:10:5: note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘RowProcessor<SomeClass>::RowFunction {aka void (*)(SomeClass, std::vector<SomeClass>&)}’
prog.cpp:6:7: note: constexpr RowProcessor<SomeClass>::RowProcessor(const RowProcessor<SomeClass>&)
class RowProcessor
^
prog.cpp:6:7: note: candidate expects 1 argument, 2 provided
prog.cpp:6:7: note: constexpr RowProcessor<SomeClass>::RowProcessor(RowProcessor<SomeClass>&&)
prog.cpp:6:7: note: candidate expects 1 argument, 2 provided