Czy istnieje jakiś sposób, aby wywołać funktor operator()(int)
o klasie szablonu Foo
jak pokazano poniżej (online version)Wywołanie szablonie funktor w szablonie klasy
template<typename T>
struct Foo
{
template<typename U>
void operator()(int)
{
}
};
int main(int argc, char *argv[])
{
Foo<char> foo;
foo<bool>(42);
}
Dostaję komunikat o błędzie w gcc 4.9. 3
error: expected primary-expression before ‘bool’
foo<bool>(42);
ja dołączana funktor z template
jeżeli funkcja nie jest członkiem funktor i został prefiksem ::
, .
lub ->
. Bez pomocy kompilator nie mógł wiedzieć, jak przetworzyć to wyrażenie; jako funktor lub instancję anonimowego obiektu typu foo<int>
.
"Operatory grają najlepiej z wydedukowanymi typami argumentów" - warto o tym pamiętać. Pominąłem jednak "&&". – Olumide
@Oumide. Argument "U &&" jest używany tylko z myślą, że jeśli typ był bardziej złożony niż prymitywny, 'std :: move' może być użyty lub' U && 'może również powiązać tymczasowy. Proste 'U' również będzie działało dobrze. – Niall