Vorlagenklasse um Boost :: Ptree Kopfschmerzen
-
24-10-2019 - |
Frage
Ich habe Mühe, herauszufinden, warum Code mit dem folgenden Snippet nicht kompiliert wird. Es mag etwas geben, das ich über Klassenvorlagen nicht verstehe (dh die typedef typenname Sache), aber ich glaube nicht, dass dies in diesem speziellen Fall ist.
template<typename data_type>
class GlobalStore {
private:
typedef boost::property_tree::basic_ptree<
std::string,
data_type,
std::less<std::string>
> _StorageTreeType;
_StorageTreeType _store;
public:
// snip
template<typename T>
const T Get(_StorageTreeType & st, const std::string & name)
{
return st.get<T>(name); //Compilation chokes here
}
};
Ich habe genau das gleiche Setup verwendet, obwohl ich außerhalb einer Vorlagenklasse (aber immer noch eins verwendet habe genau identisch Linie zu dem oben gezeigten). Der Compiler (GCC/Mingw) -Fehler ist
Erwarteter primärer Ausdruck vor
'>'
Zeichen
Wenn ich ersetze T
mit int
oder etwas in dieser Zeile, das es immer noch nicht kompiliert ("erwartete primäre Ausdruck zuvor int
").
Irgendwelche Gedanken? Boost :: Ptree -Dokumentation ist bei http://www.boost.org/doc/libs/release/boost/property_tree/ptree.hpp
Lösung
Veränderung
return st.get<T>(name);
zu
return st.template get<T>(name);
Weitere Informationen finden Sie in dieser FAQ: Was ist der ->template
, .template
und ::template
Syntax über?