首页
学习
活动
专区
圈层
工具
发布

替代CRTP
EN

Stack Overflow用户
提问于 2015-10-06 13:45:42
回答 1查看 727关注 0票数 2

假设我们有下面的virtual method

代码语言:javascript
复制
struct icountable{
   virtual int count() = 0;

   bool empty(){
      return count() == 0;
   }
}

struct list : public icountable {
...
}

现在,假设可以用CRTP重写它。应该看上去或多或少像:

代码语言:javascript
复制
template <typename T> 
struct icountable{
   bool empty(){
      return static_cast<T*>(this)->count() == 0;
   }
}

struct list : public icountable<list> {
...
}

现在假设类本身不需要使用空()方法。然后我们可以做这样的事情:

代码语言:javascript
复制
template <typename T> 
struct icountable : public T{
   bool empty(){
      return count() == 0;
   }
}

struct list_base{
...
}

typedef icountable<list_base> list;

我的问题是第三个例子。这就是所谓的traits吗?如果我使用这些,有什么好处/缺点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-06 14:12:14

正如评论所述,这是一个混合概念,您可以找到有关它的信息这里

这些特征是不同的,这里你可以找到一个基本的例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32971641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档