你链接的是using指令.using声明可以与模板化的基类一起使用(在标准中没有查找它,但只是用编译器测试它):
templatestruct c1 { void foo() { std::cout << "empty" << std::endl; } }; template struct c2 : c1 { using c1 ::foo; void foo(int) { std::cout << "int" << std::endl; } }; int main() { c2 c; c.foo(); c.foo(10); }
编译器正确地找到无参数foo
函数,因为我们的using声明将其重新声明为范围c2
,并输出预期结果.
编辑:更新了问题.这是更新的答案:
文章是正确的,你不允许使用template-id(模板名称和参数).但是你可以放一个模板名称:
struct c1 { templatevoid foo() { std::cout << "empty" << std::endl; } }; struct c2 : c1 { using c1::foo; // using c1::foo<10> is not valid void foo(int) { std::cout << "int" << std::endl; } }; int main() { c2 c; c.foo<10>(); c.foo(10); }