В этом примере я создаю класс Functor, который выполняет функции в качестве параметров. Второй функтор должен взять объект первого функтора в качестве параметра шаблона и вызвать функцию первого функтора. Я не знаю, как должен выглядеть шаблон для второго Functor.Класс шаблона в качестве параметра класса шаблона
Это первая Functor, который работает, как ожидалось:
typedef float (*pDistanceFu) (float, float);
typedef float (*pDecayFu) (float, float, float);
template <pDistanceFu Dist, pDecayFu Rad, pDecayFu LRate>
class DistFunction {
public:
DistFunction() {}
DistFunction(char *cstr) : name(cstr) {};
char *name;
float distance(float a, float b) { return Dist(a,b); };
float rad_decay(float a, float b, float c) { return Rad(a,b,c); };
float lrate_decay(float a, float b, float c) { return LRate(a,b,c); };
};
Здесь я создаю экземпляр функтора, который является специализированным:
DistFunction<foo,bar,foobar> fcn_gaussian((char*)"gaussian");
Здесь я не знаю, как шаблон должен выглядеть, использовать любой тип DistFunction < ...> как параметр
template<template<DistFunction> typename = F>
struct functor {
float fCycle;
float fCycles;
functor(float cycle, float cycles) : fCycle(cycle), fCycles(cycles) {}
float operator()(float lrate) {
return (F.lrate_decay)(lrate, fCycle, fCycles);
}
};
Как я хочу использовать второй функтор:
typedef DistFunction<foo,bar,foobar> gaussian;
void test() {
functor<gaussian> test(0,1);
}
ошибки:
error: argument list for class template "DistFunction" is missing
error: expected "class"
error: expected a "," or ">"
Как вы будете использовать «функтор»? 'Функтор'? –
songyuanyao
Обновлен вопрос, возможно, невозможно, что компилятор получает информацию о шаблоне с объекта .., я думаю, – dgrat
Кто предоставляет объект-функтор? –