Oto moje pytanie: I zdefiniować funktor:Przekaż anonimowy obiekt funkcji na std :: function?
class A {
public:
int operator()(int a, int b) const{
return a + b;
}
};
typedef function<int (int, int)> Fun;
następnie użyć anonimowego funktor utworzyć obiekt std :: function, i znajdę coś dziwnego. Oto mój kod:
Fun f(A());
f(3, 4);
Niestety jest źle. Komunikat o błędzie jest:
error: invalid conversion from ‘int’ to ‘A (*)()’ [-fpermissive]
error: too many arguments to function ‘Fun f(A (*)())’
Jednak, kiedy zmiana kodu następująco:
A a;
Fun f(a);
f(3, 4);
lub
Fun f = A();
f(3, 4);
Wynik jest w porządku. Dlaczego tak jest? Pomóż mi to zrozumieć, proszę. Dzięki.
Uderzyłeś mnie w to. Najbardziej irytujący problem z analizą. –
Czasami terminy z informatyki są nazywane w sposób wprowadzający w błąd. To nie jest jeden z tych czasów. – Yakk