функция ptr в функцию с аргументами шаблона - PullRequest
0 голосов
/ 04 сентября 2011

как мне определить функцию ptr, которая указывает на функцию, которая возвращает логическое значение, но принимает в качестве аргументов два неизвестных (но равных) типа?неправильно:

template<class arg><br> bool (ptr*)(arg,arg);

Я также хочу объединить это с функцией, которая использует такую ​​функцию-ptr для сравнения двух аргументов, которые она получает.*

template<class arg><br> void function(arg one,arg two,ptr comparefunction)

Возможно ли что-то подобное?

Ответы [ 3 ]

2 голосов
/ 04 сентября 2011

То, что вы хотите сделать, возможно следующим образом:

template<class TArg>
struct funptr
{
  typedef bool (type*)(TArg, TArg);
};

template<class TArg>
void function(TArg one,TArg two,typename funptr<TArg>::type compare)
{
}

Или просто сделайте это:

template<class TArg>
void function(TArg one, TArg two, bool (*compare)(TArg, TArg) )
{
}
2 голосов
/ 04 сентября 2011

У вас не может быть шаблонных typedefs, о которых вы изначально мечтали. Для функции, которая принимает указатель на функцию, вы можете сделать:

template<class arg>
void function(arg one,arg two,bool (*comparefunction)(arg,arg))

вместо.

Ваш первоначальный синтаксис также неверен:

bool (*ptr)(arg,arg); // * goes before the name
1 голос
/ 04 сентября 2011

Как и в другом вопросе, вы должны использовать struct:

template<typename T>
struct Function {
    typedef bool (*Ptr)(T, T);
};

И затем вы можете использовать его так:

Function<int>::Ptr f = &myfunction;

Что касается второго,Вы можете сделать это:

template<class T>
void function(T one, T two, typename Function<T>::Ptr comparefunction)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...