【发布时间】:2016-11-30 06:06:40
【问题描述】:
问题来了:一个名为Factory的类有几个签名相同的非静态成员函数,我们称它们为f1、f2等等。我想将指向这些成员函数的指针放在std::vector 中,即static const,因为在运行时不需要更改。同样,出于优雅的原因,我不想公开f1 和其他人(总结如下fi),也不想公开vector,但这是次要的。
在类中初始化vector不会起作用,因为它是一个不完整的类型,而&Factory::fi 当时是未知的。在文件级别外部初始化它将不起作用,因为fi 是私有的,我无法与全局范围成为朋友。将其放入初始化函数并使其成为 friend 将不起作用,因为这需要重写 const。
有效的是:
删除
static const限定符,代价是为每个实例制作此vector的不必要副本。编写一个
static成员函数,声明一个static变量并返回它。我认为这会一样好,但它使我的程序在所有优化下运行速度慢了一倍。
当然,我希望看到没有后一个缺点的解决方案。请不要建议我从 switch 或类似的范式巨大变化中调用函数。
【问题讨论】:
标签: c++11 static-members member-function-pointers access-specifier