我正在努力找出为什么带有以下代码段的代码无法编译。关于类模板可能有一些我不理解的东西(即typedef typename的东西),但我不认为在这种特殊情况下就是这样。
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
}
};
我使用了完全相同的设置,但在模板化的类之外(但仍然使用完全相同的行,如上所示)。编译器(GCC / MingW)错误是
'>'
令牌之前的预期主要表达
如果我将T
替换为int
或该行上的某些内容,它仍然无法编译(“int
之前的预期主要表达式”)。
有什么想法? Boost :: ptree文档位于http://www.boost.org/doc/libs/release/boost/property_tree/ptree.hpp
答案 0 :(得分:3)
更改
return st.get<T>(name);
到
return st.template get<T>(name);
有关详细信息,请参阅此常见问题解答:What is the ->template
, .template
and ::template
syntax about?