Quando T
è double(float)const
Viene visualizzato questo errore quando si tenta di utilizzare function<T>
.tratto da rilasciare const da un tipo di funzione membro?
implicit instantiation of undefined template 'std::function<double (float) const>'
Ma va bene quando è T
double(float)
. Ho provato a usare std:: remove_cv<T>::type
per rimuovere questo const
, ma non funziona. E sì, ho #include<functional>
.
Quindi la mia domanda principale è: come risolvere questo problema e rimuovere const
in modo da poter inserire questo tipo di funzione in std:: function
.?
mi sono imbattuto in questo problema quando si lavora con il metodo di lambda operator()
, ma penso che questa domanda è in genere di qualsiasi tipo di metodo, non solo per lambda
Ma la mia seconda domanda è: Cosa vuol dire double(float)const
? !! Posso capire
double (ClassName::) (float) const
quanto significa la funzione membro non può modificare il suo ClassName
oggetto. Quando inserisco questo tipo in un modello per rimuovere il tipo di classe, ricevo il double(float)const
che causa problemi.
template<typename>
struct DropClassType;
template<typename Sig, typename C>
struct DropClassType<Sig (C::*)> {
typedef Sig type_without_class;
};
(clang 3.4.2 Gli errori da g ++ -. 4.9.1 sono più criptico, ma fondamentalmente la stessa)
Cool. Quindi in realtà non significa nulla "da solo", ma può avere senso di nuovo quando viene riassociato con una classe come nei due esempi che hai dato. Esiste un tratto standard per rimuovere il const? –
@AaronMcDaid Non ne sono a conoscenza. È abbastanza oscuro che dubito che qualcuno abbia pensato di scrivere un tratto per questo. –
Penso che questo sarà meno oscuro in futuro grazie a lambda. Questo mi ha permesso di scrivere una funzione che prenderà qualsiasi lambda (o non generico), o oggetto simile, e lo convertirà automaticamente in un oggetto 'std :: function'. Semplicemente l'esecuzione di 'decltype (& T :: operator())' su un lambda restituirà un tipo, ma è necessario rimuovere il tipo di classe, e questo strano 'const', da quel tipo. Grazie! –