假设我们有以下带有virtual method
的类:
struct icountable{
virtual int count() = 0;
bool empty(){
return count() == 0;
}
}
struct list : public icountable {
...
}
现在假设可以使用
CRTP
重写它。应该看起来差不多:template <typename T>
struct icountable{
bool empty(){
return static_cast<T*>(this)->count() == 0;
}
}
struct list : public icountable<list> {
...
}
现在,假设类本身不需要使用empty()方法。然后我们可以做这样的事情:
template <typename T>
struct icountable : public T{
bool empty(){
return count() == 0;
}
}
struct list_base{
...
}
typedef icountable<list_base> list;
我的问题是第三个例子。这就是所谓的
traits
吗?如果使用这些优点/缺点? 最佳答案