围绕boost :: ptree头痛的模板类

时间:2011-04-27 18:18:42

标签: c++ templates gcc boost boost-propertytree

我正在努力找出为什么带有以下代码段的代码无法编译。关于类模板可能有一些我不理解的东西(即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

1 个答案:

答案 0 :(得分:3)

更改

return st.get<T>(name);

return st.template get<T>(name);

有关详细信息,请参阅此常见问题解答:What is the ->template, .template and ::template syntax about?