Perché il operator()
del prefisso stateless non può essere static
? Gli oggetti lambda stateless sono convertibili in puntatori a funzioni libere aventi la stessa firma del loro operator()
.Perché l'operatore() del functor stateless non può essere statico?
Stephan T. Lavavej a pag. 6 sottolinea che la conversione a un puntatore di funzione è solo un operator FunctionPointer()
(citare). Ma non riesco a ottenere un puntatore corrispondente a operator()
come a una funzione non membro. Per il functor struct F { void operator()() {} }
sembra impossibile convertire &F::operator()
in istanza di tipo using P = void (*)();
.
Codice:
struct L
{
static
void operator()() const {}
operator auto() const
{
return &L::operator();
}
};
L'errore è
'operatore()' sovraccarico non può essere una funzione membro static
ma operator()
non è sovraccarico.
Se la tua classe di functor è senza stato, qual è il punto di avere una classe piuttosto che una semplice funzione? –
Tutte le funzioni 'operator' di una classe sono considerate" operatori sovraccaricati " –
@ πάνταῥεῖ Non ha importanza nel senso di questa domanda (non pratica). Se il mio codice è una libreria, dovrei essere in grado di mantenere tutti i tipi possibili forniti dall'utente. – Orient