C ++成员函数模板将成员函数指针作为模板参数

时间:2018-06-29 15:52:05

标签: c++

我有一类具有一些非常相似的成员函数f_af_bf_c的类。

class A {
public:
    double f_a() {return 1.0;}
    double f_b() {return 2.0;}
    double f_c() {return 3.0;}

    template <double (A::*any_f)()>
    double my_f() {
        return any_f()
    }
}

所以我的问题是,是否可以在不使这些成员函数静态化的情况下以这种方式使用该类。

int main() {
    A a;
    a.my_f<&A::f_a>();
    a.my_f<&A::f_b>();
    a.my_f<&A::f_c>();
}

提前谢谢!

1 个答案:

答案 0 :(得分:6)

我认为这就是你想要的

class A {
public:
    double f_a() {return 1.0;}
    double f_b() {return 2.0;}
    double f_c() {return 3.0;}

    template <double (A::*any_f)()>
    double my_f() {
        return (this->*any_f)();
    }
};

int main() {
    A a;
    a.my_f<&A::f_a>();
    a.my_f<&A::f_b>();
    a.my_f<&A::f_c>();
}