Я создаю контейнерный шаблон для другого типа. Один из типов будет shared_ptr
для объекта. Так избежать дублирования кода операнда ->
и .
вызова методов объекта Я пытаюсь передать указатель на метод как аргумент функции, но я получил эту ошибку:Как передать указатель метода как аргумент в методе класса шаблона
error: invalid use of non-static member function 'void A::show()'
{ doOperation(U::show); }
код:
template <typename T, typename U>
class MepVector
{
private:
typedef void(U::*Operation)();
public:
MepVector() {}
void doOperation(Operation operation)
{
for(const auto& t : mepVector_)
{
(t.*operation)();
}
}
void add(T t)
{ mepVector_.push_back(t); }
void show()
{ doOperation(U::show); }
private:
std::vector<T> mepVector_;
};
class A
{
public:
A() {};
void show()
{ cout<<"udalo sie!"<<endl; }
};
int main() {
MepVector<A,A> myVector;
myVector.add(A());
myVector.show();
return 0;
}
Я не Не хочу делать A::show()
static
.
спасибо, это работает – user3191398