最后类调用静态方法如何能够做到用C++ 11以下设计:设计模式,在
class Consumer : Base<Consumer>
{
// different consumers will have different methods (of the same signature)
void Foo(){...}
void Bar(){...}
: // etc.
static void override
register_all() {
register_method<&Consumer::Foo>("foo");
register_method<&Consumer::Bar>("bar");
: // etc.
}
:
}
template<typename T>
class Base
{
static
Base() {
register();
}
virtual static void
register_all(){ };
using F = void(T::*)();
template<F f>
static void
register_method(std::string name) {
...
}
}
...?
请注意,我做了两件违法的事情:
- 我使用静态构造函数(不允许)在基类
- 我使用虚拟静态函数(也不允许)
注意:在访问第一个实例(它将填充一个静态C函数指针表)之前,方法的注册只需要进行一次。
最后,有没有更好的技术可以使用,某种方式需要注册的标记或标记方法,并保存消费者在手动注册到单独函数中的麻烦?
'register'是C++中的关键字。 –
我不明白你在这里做什么。在工作中有太多虚构的结构使得难以遵循整体观点。 – Rapptz
您想要注册的方法的名称是已知的还是全局固定的,还是每个派生类都决定要注册什么? –