C ++ / templates / GCC 4.0错误?

时间:2010-02-11 15:10:45

标签: c++ templates gcc

提供以下代码:

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 个答案:

答案 0 :(得分:7)

load是一个依赖名称,所以

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

与依赖名称为类型时需要typename的原因相同。

答案 1 :(得分:4)

您需要_ResLoader::template load< _ResClass >( path )代替_ResLoader::load< _ResClass >( path )

访问嵌套了模板参数的模板时,需要使用template关键字(对于嵌套在模板参数中的类型,需要使用typename关键字)。