Poniższy kod działa dla mnie:szablony użytkownika funkcyjną i przeciążanie operatorów() w C++
class Foo {
public:
template <class T> T& get() { ... }
};
Foo foo;
foo.get<int>() = ...;
jednak następujący fragment kodu nie działa dla mnie:
class Foo {
public:
template <class T> T& operator()() { ... }
};
Foo foo;
foo<int>() = ...;
błędów są:
expected primary-expression before '>' token
expected primary expression before ')' token
Oba błędy odnoszą się do foo<int>()
Dlaczego to nie działa i czy można to naprawić?
Twój szablon 'operator()' jest całkiem niezdatny do użytku, ponieważ jego wystąpienia mogłyby zostać przeciążone tylko na wartości zwracanej. Kontynuuj używanie nazwy 'get' lub podobnej. – aschepler
Nie nadaje się do użytku (choć może nie być preferowana). Zobacz odpowiedzi poniżej. –
Dlaczego zmieniasz funkcje, ale nie całą klasę? –