Je reçois une erreur de compilation de:erreur du compilateur n'a pas de sens (erreur paramètre manquant à la fonction)
erreur: aucune fonction de mise en correspondance pour l'appel à buildTransFunc(<unresloved overloaded function type>, boost::function<EnumType(short int)>, EnumTypeToStringTranslator&)
La déclaration de buildTransFunc est la suivante :
template<typename RT, typename func, typename... Args>
RT buildTransFunc(func f, Args... args)
{
return RT(boost::bind(f, _1, args...));
}
J'appelle ci-dessus comme suit:
typedef boost::function<std::string (short int)> toASCIITranslator;
toASCIITranslator temp = buildTransFunction<toASCIITranslator, std::string (*) (short int, boost::function<EnumType(short int)>, EnumTypeToStringTranslatorType&), boost::function<EnumType(short int)>, EnumTypeToStringTranslatorType& >
(&Translator<std::string, forward_trans, short int, boost::function<EnumType (short int)>, EnumTypeToStringTranslatorType>, boost::function<EnumType(short int)(&enumChecker), EnumTypeToStringTranslator);
Le message d'erreur semble ignorer le paramètre std :: string (*) (short int, boost :: function, EnumTypeToStringTranslatorType &) dans le message d'erreur, tout le reste étant présent. J'utilise GCC 4.5.2 pour le compilateur.
La déclaration de la fonction Traducteur est:
template<typename RT, typename D, typename... Args>
RT Translator(Args... args)
{
return static_cast<RT>(translate<RT, D>(args...));
}
Les fonctions de traductions se trouvent dans cette question: Translate
EDIT appel corrigé buildTransFunction pour terminer les paramètres de specifing.
g ++ arguments utilisés: -std = C++ 0x.
Vous utilisez une (liste d'arguments de modèle variable) fonction C++ 0x. Avez-vous dit au compilateur de compiler C++ 0x? –
oui, j'ai ajouté le -std = C++ 0x à la liste des arguments pour le compilateur. – diverscuba23
Vous devez avoir un code bizarre. Pourquoi est-ce que '& enumChecker' vous donne un' boost :: function <> '? Aussi, où avez-vous déclaré 'f'? Tout cela ne ressemble pas à du vrai code. Nous avons aussi besoin de la déclaration de 'Traducteur'. –