C++ 使用显式参数从模板化函数中调用模板化类的模板化成员 模板 结构foo{ 模板 void f(int i){} }; 模板 空条(){ 富民; m、 f(1);//A行 } int main(){ bar(); 福安; n、 f(1);//第B行 返回0; }
GCC看到C++ 使用显式参数从模板化函数中调用模板化类的模板化成员 模板 结构foo{ 模板 void f(int i){} }; 模板 空条(){ 富民; m、 f(1);//A行 } int main(){ bar(); 福安; n、 f(1);//第B行 返回0; },c++,templates,gcc,c++14,dependent-name,C++,Templates,Gcc,C++14,Dependent Name,GCC看到为什么要使用这种模式?即使MSVC断然拒绝该关键字,我也宁愿引入一个扩展到template其他地方的宏。@DavisHerring MSVC不拒绝该关键字。符合标准的方法是编写m.template f(1)。我只是不想把这些写在我的代码上,因为我觉得这样会降低可读性。一般来说,任何允许在呼叫站点使用更简单语法的技巧都可以作为一个答案。对于那些了解该语言并对你的意思是(m.f1?唯一的技巧(除了#define H template和#define tmethod template met
为什么要使用这种模式?即使MSVC断然拒绝该关键字,我也宁愿引入一个扩展到template
其他地方的宏。@DavisHerring MSVC不拒绝该关键字。符合标准的方法是编写m.template f(1)
。我只是不想把这些写在我的代码上,因为我觉得这样会降低可读性。一般来说,任何允许在呼叫站点使用更简单语法的技巧都可以作为一个答案。对于那些了解该语言并对你的意思是(m.f1
?唯一的技巧(除了#define H template
和#define tmethod template method
)感到惊讶的人来说,可读性如何我曾经看到,只有当bar
可以作为派生类(模板)上的方法时,这种方法才会起作用。这里有什么值得关注的吗?@DavisHerring IMO不一致地解释a行和B行是不合理的标准
template<int N>
struct foo {
template<int M>
void f(int i){}
};
template<int N>
void bar() {
foo<N> m;
m.f<1>(1); // line A
}
int main(){
bar<1>();
foo<1> n;
n.f<1>(1); // line B
return 0;
}