Esiste un modo per chiamare il funtore operator()(int)
di un modello di classe Foo
come mostrato di seguito (online version)Chiamare un funtore su modelli in un modello di classe
template<typename T>
struct Foo
{
template<typename U>
void operator()(int)
{
}
};
int main(int argc, char *argv[])
{
Foo<char> foo;
foo<bool>(42);
}
sto ottenendo il messaggio di errore in GCC 4.9. 3
error: expected primary-expression before ‘bool’
foo<bool>(42);
avrei anteporre funtore con template
se la funzione membro non era un funtore ed era prefisso ::
, .
o ->
. Senza alcun aiuto il compilatore non potrebbe sapere come analizzare questa espressione; come funtore o istanziazione di un oggetto anonimo di tipo foo<int>
.
"Gli operatori giocano meglio con i tipi di argomenti del modello dedotti" - vale la pena ricordare. Ho omesso il '&&' però. – Olumide
@Olumide. L'argomento 'U &&' viene usato solo con l'idea che se il tipo fosse più complesso di una primitiva, si potrebbe usare un 'std :: move' o 'U &&' può anche legarsi ad un temporaneo. Un semplice 'U' funzionerebbe anche bene. – Niall