假设我们有以下带有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吗?如果使用这些优点/缺点?

最佳答案

就像评论所说,这是混合概念,您可以找到关于它的信息here

特征不同,您可以在here中找到一个基本示例。

10-08 13:45