如何初始化引用私有字段的 static const class 成员对象?

How can I initialize static const class member object referring to private fields?

问题来了:一个叫做Factory的class有几个相同签名的非静态成员函数,我们称它们为f1f2等等.我想将指向这些成员函数的指针放在 std::vector 中,即 static const,因为它不需要在 运行 时间内更改。同样,出于优雅的原因,我不想公开 f1 和其他人(下面总结为 fi),也不想公开 vector,但那是次要的。

初始化class中的vector不会起作用因为它是一个不完整的类型,&Factory::fi当时未知。在文件级别外部初始化它 将不起作用 因为 fi 是私有的,我无法与全局范围成为朋友。将其放入初始化函数并使其成为 friend 将不起作用 因为这需要重写 const.

有效的是:

当然,我希望看到没有后者缺点的解决方案。请不要建议我从 switch 或范例的类似巨大变化中调用函数。

这是你的想法吗?从问题陈述来看不是很清楚。

#include <vector>

class Factory {
private:
    void f1() {}
    void f2() {}
public:
    typedef void (Factory::*PF)();
    static const std::vector<PF> v;
};

const std::vector<Factory::PF> Factory::v{&Factory::f1, &Factory::f2};


int main()
{
    Factory f;
    (f.*Factory::v[0])();
}

Demo