题
是否有可能使用的"使用"声明模板的基础课程?我读它不是 在这里, 但是,由于技术原因或是它对C++标准,并不适用于海湾合作委员会或其他汇编者?如果这是不可能的,你为什么不呢?
例代码(从上面的链接):
struct A {
template<class T> void f(T);
};
struct B : A {
using A::f<int>;
};
解决方案
您链接什么是using指令。 A,使用声明可以用来精细与模板化基类(没有在标准看着它,而只是与一个编译器测试它):
template<typename T> struct c1 {
void foo() { std::cout << "empty" << std::endl; }
};
template<typename T> struct c2 : c1<T> {
using c1<T>::foo;
void foo(int) { std::cout << "int" << std::endl; }
};
int main() {
c2<void> c;
c.foo();
c.foo(10);
}
编译器正确地找到参数更少foo
功能,因为我们的using声明的重新声明它变成c2
的范围内,并输出该预期的结果。
修改强>:更新的问题。这里是更新的答案:
在文章说得对,你是不是允许使用模板id(模板名称和参数)。但是,你可以把一个模板名称:
struct c1 {
template<int> void 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);
}
不隶属于 StackOverflow