J'essaie de trouver ce que g ++ paramètres compilateur à utiliser pour compiler cet exemple C++ code:Est-il possible d'utiliser functor comme paramètre de template pour std :: function?
#include <stdio.h>
#include <functional>
struct mystruct
{
int a;
int operator()(int y) { return y + 1; }
};
int main()
{
std::function<mystruct> foo;
return 0;
}
En ce qui concerne cpp est écrit que paramètre de modèle std :: fonction peut être « ... ou d'autres objets de la fonction » . Je travaille sur un grand projet contenant plusieurs fonctions std :: et le projet peut être construit avec g ++. Je suis en train de le construire sous VS2015 mais compilateur sur un tel code se plaint:
erreur C2027: utilisation de type non défini 'std :: _ Get_function_impl < _Fty>' avec [ _Fty = mystruct ]
quand Je tente de compiler petit échantillon ci-dessus sous g ++ avec std = C++ 11 il comlains aussi:
erreur: global « std :: fonction d'un » a un type incomplet et ne peut pas être définie
Je pense que dans notre grand Le projet buildable g ++ a probablement changé d'extension qui fournit une telle capacité.
Où voyez-vous que le paramètre template peut être autre chose qu'un type de fonction (par exemple, int (double, char) ')? cppreference dit qu'il peut * stocker * des objets de fonction. Quoi qu'il en soit, que ferait-il si 'mystruct' avait plus d'une surcharge' operator() 'ou si' operator() 'était modélisé? il ne peut pas effacer de manière sécurisée une signature d'appel. – chris