C ++ / templates / GCC 4.0 ошибка? - PullRequest
       14

C ++ / templates / GCC 4.0 ошибка?

1 голос
/ 11 февраля 2010

Приведенный ниже код:

template<class _ResClass, class _ResLoader=DefaultLoader>
class Resource 
: public BaseResource
{
private:
    _ResClass data_;

public:
    explicit Resource(const std::string& path)
    : data_( _ResLoader::load< _ResClass >( path ))
    { };
};

Почему это не удастся, но этот будет работать?:

template<class _ResClass, class _ResLoader=DefaultLoader>
class Resource 
: public BaseResource
{
private:
    _ResClass data_;

public:
    explicit Resource(const std::string& path)
    : data_( **DefaultLoader**::load< _ResClass >( path ))
    { };
};

Ответы [ 2 ]

7 голосов
/ 11 февраля 2010

load является зависимым именем, поэтому

data_( _ResLoader::template load< _ResClass >( path ))

по той же причине, что и typename, требуется, когда зависимое имя является типом.

4 голосов
/ 11 февраля 2010

Вам нужно сделать _ResLoader::template load< _ResClass >( path ) вместо _ResLoader::load< _ResClass >( path ).

При доступе к шаблону, вложенному с помощью параметра шаблона, вам нужно использовать ключевое слово template (так же, как вам нужно использовать ключевое слово typename для типов, вложенных в параметры шаблона).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...