我想使用CRTP来实现编译时多态,并且想要强制派生类来实现函数。正在使用CRTP模拟静态多态中的纯虚函数吗?
当前的实现是这样的。
template <class Derived>
struct base {
void f() {
static_cast<Derived*>(this)->f();
}
};
struct derived : base<derived>
{
void f() {
...
}
};
在此实现,调用函数陷入无限循环,如果派生类没有实现f()
。
如何强制派生类实现像纯虚函数一样的函数?我尝试使用'static_assert',如static_assert(&base::f != &Derived::f, "...")
,但它生成一条错误消息,指出指向不同类的成员函数的两个成员函数指针不具有可比性。
查看'ctype :: scan_is'和'ctype :: do_scan_is'。 – Mehrdad 2015-02-09 06:02:40