considerare questo codice semplice e senza senso.C++ modelli di funzioni e funzioni
#include <iostream>
struct A {
template<int N>
void test() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a.test<1>();
}
È un esempio molto semplice di un modello di funzione. Che cosa succede se, tuttavia, volevo sostituire A::test
con un sovraccarico operator()
per renderlo un funtore?
#include <iostream>
struct A {
template<int N>
void operator()() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a<1>(); // <-- error, how do I do this?
}
Certamente se la presero operator()
parametri che erano a carico del modello, il compilatore potrebbe dedurre il modello. Ma non riesco a capire la sintassi corretta per specificare i parametri del modello con un functor senza parametri.
Esiste un modo corretto per farlo?
Ovviamente, questo codice dovrebbe funzionare dal momento che bypassa la sintassi funtore:
a.operator()<1>();
ma che sconfigge un pò lo scopo di esso che è un :-P funtore.
+1: Sintassi strana per l'utilizzo in offuscamento del codice. Dovrebbe essere menzionato in http://thc.org/root/phun/unmaintain.html :-) –