一组嵌套的C ++模板

时间:2016-02-14 07:17:00

标签: c++ templates gcc

这段代码可以在VS2013中正确运行,并输出:
  你好,133
  你好,233
,但在code :: blocks(使用GCC编译器和Ubuntu系统)中,编译器告诉我:

|| === Build:test_sth中的Debug(编译器:GNU GCC编译器)=== |
在成员函数'void A :: say()'中:
第28行错误:')'令牌之前的预期主要表达式
在'void A :: say()[with C = B]'的实例化中: 第31行要求从这里开始 第28行错误:类型'<的无效操作数未解决的重载函数类型>'和'int'到二元'运算符<' || ===构建失败:2个错误,2个警告(0分钟,0秒(s))=== |

有没有人可以告诉我什么是错的?为什么?

第28行是:this-> c.Match< 233>();
第31行是:模板结构A< B< int>取代;

JLayeredPane

1 个答案:

答案 0 :(得分:1)

以下摘自http://www-01.ibm.com/support/knowledgecenter/SSQ2R2_8.0.3/com.ibm.xlcpp111.aix.doc/language_ref/keyword_template_qualifier.html

使用关键字模板作为限定符来区分成员模板与其他实体。以下示例说明何时必须使用模板作为限定符:

class A
{
  public:
    template<class T> T function_m() { };
};

template<class U> void function_n(U argument)
{
  char object_x = argument.function_m<char>();  // ill-formed
}

在此示例中,变量object_x的定义不正确。编译器假定符号&lt;是一个不足的运营商。为了使编译器能够识别模板函数调用,必须添加模板限定符:

char object_x = argument.template function_m<char>();