Можно ли иметь указатель на функцию шаблона в C ++? - PullRequest
1 голос
/ 27 мая 2010

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

Я использую VS2008.

Следующий код получает эту ошибку времени компиляции:

"не удалось преобразовать из 'перегруженной функции' в 'int (__cdecl *) (int &, int &)' Ни одна из функций с таким именем в области не соответствует целевому типу"

template<typename T>
T tfunc(const T &x, const T &y){
    return (x < y ? x : y);
}

int (*tfunc_ptr)(int &, int &) = &tfunc<int>;

Ответы [ 3 ]

11 голосов
/ 27 мая 2010

Ваши аргументы неверны. tfunc принимает аргументы по константным ссылкам, поэтому указатель вашей функции должен делать то же самое;

int (*tfunc_ptr)(const int &, const int &) = &tfunc<int>;
3 голосов
/ 27 мая 2010
template<typename T>
T tfunc(const T &x, const T &y){
 return (x < y ? x : y);
}

int (*tfunc_ptr)(const int&, const int&) = tfunc<int>;

int main() {
    int b = tfunc_ptr( 1, 2 );
}
2 голосов
/ 27 мая 2010

Хм ... что случилось с твоим ответом? Это было правильно. Вам необходимо указать параметр шаблона:

int (*tfunc_ptr)(int const&,int const&) = &tfunc<int>;

О, и обратите внимание на ссылки. Ваш шаблон имеет их, ваш funptr нет. Это должно соответствовать.

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