Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何调用模板成员函数?_C++_Templates - Fatal编程技术网

C++ 如何调用模板成员函数?

C++ 如何调用模板成员函数?,c++,templates,C++,Templates,可能重复: 模板 甲级 { 公众: 模板 void foo()常量{} }; 模板 空栏(施工图A和b) { b、 foo();//这将抛出“在'>'标记之前预期的主表达式” } 我可以把它改成 b->A<T1>::template foo<T0>(); b->A::template foo(); 这很好。不过我也可以把它改成 b.A<T1>::template foo<T0>(); b.A::template foo(); 这也

可能重复:

模板
甲级
{
公众:
模板
void foo()常量{}
};
模板
空栏(施工图A和b)
{
b、 foo();//这将抛出“在'>'标记之前预期的主表达式”
}
我可以把它改成

b->A<T1>::template foo<T0>();
b->A::template foo();
这很好。不过我也可以把它改成

b.A<T1>::template foo<T0>();
b.A::template foo();
这也很好。嗯?

如何正确调用原始代码意义上的模板成员函数?

刚刚找到它:

根据C++'03标准14.2/4:

当成员模板的名称出现在
之后时,或
->
在后缀表达式中,或在限定id中嵌套名称说明符之后,并且后缀表达式或限定id显式依赖于模板参数(14.6.2),成员模板名称必须以关键字
template
作为前缀。否则,将假定该名称为非模板名称

正确的代码是:

b.template foo<T0>();
b.template foo();

您可以通过以下方式调用该函数:

b.template foo<T0>();
b.template foo();

我们知道实际编译的两条语句是什么意思吗?在这个“熟记”的例子中,它们是编译的,但在我的实际程序中,这并不编译。这样做的原因和条件与需要
typename
时相同。
b.template foo<T0>();