受保护的模板成员函数在模板类中

时间:2016-01-01 13:48:23

标签: c++ templates

假设我们有

template<typename T>
class Base
{
    ...

    protected:

        template<typename U>
        void compute(U x);

    ...
};

现在我想从派生类中调用此方法。使用非模板成员函数,我通常会使用using ...声明或访问成员this->...。但是,它不清楚如何访问模板成员:

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 个答案:

答案 0 :(得分:1)

更容易。你可以写:

void computeFloat() {
    float x = .1;
    this->compute(x);
}

类型是自动推断的。

修改

对于一般情况,当无法推断出类型时,您可以使用:

Base<T>::template compute<float>();

或者:

this->template compute<float>();

对于示例,我使用了没有参数的compute函数。