提供以下代码:
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 ))
{ };
};
答案 0 :(得分:7)
load是一个依赖名称,所以
data_( _ResLoader::template load< _ResClass >( path ))
与依赖名称为类型时需要typename
的原因相同。
答案 1 :(得分:4)
您需要_ResLoader::template load< _ResClass >( path )
代替_ResLoader::load< _ResClass >( path )
。
访问嵌套了模板参数的模板时,需要使用template
关键字(对于嵌套在模板参数中的类型,需要使用typename关键字)。