#c
#c
Вопрос:
Я пытаюсь написать шаблон, который принимает шаблон к нетиповому параметру статической функции-члена:
#include <iostream>
using namespace std;
class C {
public:
static void method()
{
cout << "C::method" << endl;
}
};
typedef void (C::*pMethod)();
template<typename T, pMethod>
void callingFunction()
{
T c;
pMethod aPointerToMember = amp;T::method;
(c.*aPointerToMember)();
}
int main()
{
callingFunction<C, amp;C::method>();
return 0;
}
Но я всегда получаю ошибку при вызове функции в main:
error: no matching function for call to 'callingFunction()' // mingw
Если функция-член не является статической, она работает, как я могу заставить ее работать со статической функцией?
Спасибо.
Спасибо
Комментарии:
1. Статические методы — это просто синтаксический сахар для отдельно стоящих функций… (ну, не совсем, но почти)
Ответ №1:
Для статической функции-члена измените свой typedef на typedef void (*pMethod)();
— как если бы это была свободная функция.
Комментарии:
1. затем я получаю это: ошибка: ‘apointomember’ не может использоваться в качестве указателя на член, поскольку он имеет тип ‘void (*)()’
2. вы должны изменить (c.*aPointerToMember)(); на (aPointerToMember)();
3. @vBx: Вам также нужно будет вызвать ее так, как если бы это была бесплатная функция — удалите
c.*
. Статическая функция не связана ни с одним экземпляром класса.