Supponiamo che io abbia una funzione che esegue alcuni effetti collaterali e quindi restituisce una risposta:puntatori a funzione e conversioni di tipo di ritorno
int foo()
{
perform_some_side_effect();
return 42;
}
voglio legare foo
ad un puntatore a funzione, ma non sono interessato al risposta, solo l'effetto collaterale:
void (*bar)() = foo;
Tuttavia, questo sembra essere un errore di tipo:
error: invalid conversion from ‘int (*)()’ to ‘void (*)()’
Qual è la logica dietro quell'errore? Perché il sistema di tipi non consente di ignorare la risposta?
Una nota a parte, funziona se mi avvolgo il puntatore a funzione in una std::function
:
std::function<void()> baz = foo;
Come si fa std::function
(apparentemente) riescono ad aggirare questa restrizione nel sistema tipo?
Il razionale è solo che sono diversi tipi. Puoi sovrascrivere questo (a tuo rischio e pericolo) con 'reinterpret_cast'. –
@StevenBurnap: la domanda è * perché * non possono essere convertiti. È ovvio che sono tipi diversi. Anche un 'float' non è un' int, ma puoi convertirli. – Puppy
Direi che è perché come regola generale non è permesso lanciare i puntatori. –