问题在于:名为Factory
的类有几个具有相同签名的非静态成员函数,我们称之为f1
,f2
等等。我想在一个std::vector
的{{1}}中指出这些成员函数的指针,因为在运行时不需要改变它。同样,出于优雅的原因,我不想公开static const
和其他人(下面简要f1
),而不是fi
,但那是次要的。
初始化类中的vector
将无法正常工作,因为它是一个不完整的类型,当时vector
是未知的。在文件级之外将其初始化将无法正常工作,因为&Factory::fi
是私有的,我无法与全局范围成为朋友。将其置于初始化函数中并使fi
不起作用,因为这需要重写friend
。
有效的是:
删除const
限定符,但代价是为每个实例制作此static const
的不必要副本。
编写vector
成员函数,声明static
变量并返回它。我认为这样做会一样好,但它会使我的程序在所有优化的情况下运行速度慢两倍。
当然,我希望看到没有后者缺点的解决方案。请不要建议我从static
或类似的范例变化来调用这些函数。
答案 0 :(得分:1)
这是你的想法吗?从问题陈述中不太清楚。
#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])();
}