Шаблонный класс вокруг boost :: ptree headache - PullRequest
3 голосов
/ 27 апреля 2011

Я пытаюсь выяснить, почему код со следующим фрагментом не будет компилироваться. Может быть что-то, чего я не понимаю в шаблонах классов (например, имя типа typedef), но я не думаю, что это именно в этом конкретном случае.

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)

ожидаемое первичное выражение до '>' token

Если я заменим T на int или что-то в этой строке, оно все равно не скомпилируется («ожидаемое первичное выражение до int»).

Есть мысли? Документация Boost :: ptree находится по адресу http://www.boost.org/doc/libs/release/boost/property_tree/ptree.hpp

1 Ответ

3 голосов
/ 27 апреля 2011

Изменить

return st.get<T>(name);

на

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

Подробнее об этом см. В этом FAQ: Что такое синтаксис ->template, .template и ::template?

...