C ++ указатель на функцию шаблона, который член класса - PullRequest
4 голосов
/ 16 ноября 2011

У меня есть следующие функции в классе "C"

class C
{
  template<typename T> void Func1(int x);
  template<typename T> void Func2(int x);
};

template<typename T> void C::Func1(int x)
{
  T a(x);
}

template<typename T> void C::Func2(int x)
{
  T a(x);
}

Функции используют шаблоны только в реализации. Подпись не содержит параметров шаблона.

Можно ли определить указатели на такие функции шаблона?

Я попробовал следующее определение, но оно приводит к ошибке компиляции.

typedef template<typename T> void (СSomeClass::*TFuncPtr)(int);

Ответы [ 2 ]

8 голосов
/ 16 ноября 2011

После создания шаблон функции-члена является просто обычной функцией-членом, поэтому вы можете использовать обычный указатель на функцию-член (лучше всего typedef ', как показано ниже):

typedef void (C::*mem_fun_ptr)(int);
mem_fun_ptr p = &C::Func1<Bar>;
//          IMPORTANT -- ^^^^^

Подчеркнутая частьважная часть.Вы не можете создать указатель на шаблон функции, но вы можете создать указатель на экземплярный шаблон функции.

2 голосов
/ 16 ноября 2011

вы хотите только указатель на функцию? это просто:

class C
{
public:
  template<typename T> void Func1(int x);
};

typedef void (C::*TFuncPtr)(int);

int main()
{
 TFuncPtr ptr = &C::Func1<int>;
}

если вы хотите что-то еще, не могли бы вы показать пример использования нужного указателя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...