Ich verwende folgenden Code mit C++ 11 und bekomme einen Fehler, den ich nicht verwenden darf typeof
!Warum C++ erlaubt mir nicht, typeof zu verwenden?
Was ist das Problem und wie kann man das beheben?
Der Fehler:
Error 10 error C2923: 'typeof' is not a valid template type argument for parameter 'C'
Hier ist mein Code:
#define HIBERLITE_NVP(Field) hiberlite::sql_nvp< typeof(Field) >(#Field,Field)
class Person{
friend class hiberlite::access;
template<class Archive>
void hibernate(Archive & ar)
{
ar & HIBERLITE_NVP(name); //ERROR
ar & HIBERLITE_NVP(age); //ERROR
ar & HIBERLITE_NVP(bio); //ERROR
}
public:
string name;
double age;
vector<string> bio;
};
sql_nvp das ist wie:
template<class C>
class sql_nvp{
public:
std::string name;
C& value;
std::string search_key;
sql_nvp(std::string _name, C& _value, std::string search="") : name(_name), value(_value), search_key(search) {}
};
Wie wäre es mit "C++ hat keinen' typeof' "? – Xeo
Verwenden Sie stattdessen 'declltype'. – deepmax
Alternativ könnten Sie eine Funktionsvorlage schreiben, die auf den Typ schließen kann, z. 'make_nvp (# Feld, Feld)'. Dies funktioniert auch in älteren Versionen der Sprache ohne 'declltype'. –