是否有可能使用的"使用"声明模板的基础课程?我读它不是 在这里, 但是,由于技术原因或是它对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); 
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top