2010-07-15 53 views
2

下面的代码如何修复此代码中的语法与模板充斥?

template<typename T, typename U> class Alpha 
{ 
public: 
    template<typename V> void foo() {} 
}; 

template<typename T, typename U> class Beta 
{ 
public: 
    Alpha<T, U> alpha; 
    void arf(); 
}; 

template<typename T, typename U> void Beta<T, U>::arf() 
{ 
    alpha.foo<int>(); 
} 

int main() 
{ 
    Beta<int, float> beta; 
    beta.arf(); 
    return 0; 
} 

编译失败原因为:

../src/main.cpp: In member function ‘void Beta::arf()’:
../src/main.cpp:16: error: expected primary-expression before ‘int’
../src/main.cpp:16: error: expected ‘;’ before ‘int’

如何赫克我解决这个问题?我试过了我能想到的一切。

回答

4

alpha::foodependent name,使用alpha.template foo<int>()

相关的名称被假定为

  • 没有类型,除非typename
  • 前缀不是模板,除非template
+1

VC8直接前缀不规范有关这一点。用VC8编写可移植代码是如此的混乱...... – 2010-07-15 16:58:27

+1

@ale:哦,是的 - 后来从VC8移植模板很重的零件是一件非常痛苦的事情。 – 2010-07-15 17:01:09

4

尝试alpha.template foo<int>()。请注意,你的代码在VC8下编译得很好。由于alpha是依赖类型,所以您必须指定foo是模板。