qualcuno ha già fatto questa domanda, ma il thread ha finito con la domanda originale che non ha avuto risposta.templated operator() overload C++
si supponga di avere questo:
template<size_t i, class f_type>
void call_with_i(f_type f);
functor_type quando è:
a) una struttura con un metodo che ha la seguente firma:
template<size_t i> operator()() const;
o, b) una funzione simile a questa:
template<size_t i> foo();
che voglio "call_with_i < 42> (foo)" equivalente a "foo < 42>()", ma io non riesco a capire la sintassi giusta per realizzare questo obiettivo. Sarei soddisfatto con una soluzione che faccia solo (a)
ma (a) + (b) sarebbe ottima
. Ho già provato queste sintassi:
f<i>(); // doesn't work
f()<i>; // doesn't work
f.operator<i>(); // doesn't work
f.operator()<i>; // doesn't work
f.operator()<i>(); // works on msvc, but doesn't work on gcc.
Come si richiama operatore() con argomenti espliciti template?
C'è un modo per invocarlo in modo che la stessa sintassi possa anche chiamare una funzione libera basata su modelli?
p.s. Se ti stai chiedendo per cosa sto usando questo, è perché sto scrivendo una funzione repeat_to dove repeat_to < 10> (f) richiama f (0) poi f (1) ... f (10). Lo sto usando per scorrere più vettori boost :: fusion in parallelo per indice. si, potrei usare gli iteratori, o potrei semplicemente usare una funzione membro chiamata, ma voglio ancora sapere la risposta.
modifica nota: ho eliminato la roba perché passare una funzione basata su modello come argomento non ha alcun senso.
Non è stata data risposta perché non è possibile. – GManNickG