In diesem Beispiel erstelle ich eine Functor-Klasse, die Funktionen als Parameter übernimmt. Der zweite Funktor soll ein Objekt des ersten Funktors als Template-Parameter nehmen und eine Funktion des ersten Funktors aufrufen. Ich bin mir nicht sicher, wie die Vorlage für den zweiten Functor aussehen muss.Template-Klasse als Template-Klassenparameter
Dies ist die erste Functor, die wie erwartet funktioniert:
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); };
};
Hier erstelle ich eine Instanz der Funktor, die spezialisiert ist:
DistFunction<foo,bar,foobar> fcn_gaussian((char*)"gaussian");
Hier kann ich nicht wissen, wie die Vorlage hat zu suchen, zu nehmen jede Art von DistFunction < ...> als Parameter
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);
}
};
Wie ich den zweiten Funktors verwenden möchten:
typedef DistFunction<foo,bar,foobar> gaussian;
void test() {
functor<gaussian> test(0,1);
}
Die Fehler:
error: argument list for class template "DistFunction" is missing
error: expected "class"
error: expected a "," or ">"
Wie verwenden Sie 'funktor'? 'Funktor'? –
songyuanyao
Aktualisiert die Frage, wahrscheinlich nicht möglich, dass der Compiler die Vorlage Informationen aus dem Objekt bekommt .., ich denke, – dgrat
Wer bietet das Funktor-Objekt? –