Шаблоны нетиповых параметров для статической функции-члена

#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.* . Статическая функция не связана ни с одним экземпляром класса.