Protected template member functions in a template class
本问题已经有最佳答案,请猛点这里访问。
假设我们有
1 2 3 4 5 6 7 8 9 10 11 12 | template<typename T> class Base { ... protected: template<typename U> void compute(U x); ... }; |
现在我想从派生类调用这个方法。对于非模板成员函数,我通常使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | template<typename T> class Derived : public Base<T> { // what's the correct syntax for // using ... template ... Base<T>::compute<U> ... ? ... void computeFloat() { float x = ...; compute<float>(x); } void computeDouble() { double x = ...; compute<double>(x); } ... }; |
更容易。你可以写:
1 2 3 4 | void computeFloat() { float x = .1; this->compute(x); } |
类型是自动推断的。
编辑
对于一般情况,当无法推导类型时,可以使用以下任一项:
1 | Base<T>::template compute<float>(); |
或:
1 | this->template compute<float>(); |
对于示例,我使用了一个没有参数的