【发布时间】:2011-01-18 06:18:24
【问题描述】:
#include <iostream>
template <class Derived>
class Base
{
public:
void method1()
{
static_cast<Derived*>(this)->method1();
}
void method2()
{
static_cast<Derived*>(this)->method2();
}
};
class Derived1: public Base<Derived1>
{
public:
void method1()
{
std::cout << "Method 1 of Derived1 executed.\n";
}
};
int main(int argc, char *argv[])
{
Derived1 d1;
d1.method1();
d1.method2();
return 0;
}
后续问题:如何使这种类型安全?也就是说,如果有人忘记实现方法 2,我希望编译器能够捕获它。我不希望它在运行时爆炸。
【问题讨论】:
-
出于某种原因,我认为这样的错误会在编译时被发现。有什么方法可以使这种类型安全?
-
您可以通过基本的 SFISAE 方法检查系统使其类型安全,您可以在 SO 或 google 上的几个问题中找到该系统。
-
@Noah:你是说 SFINAE 吗?而且我不知道如何在这里应用它。
标签: c++ polymorphism crtp