C中空类的优点

新手上路,请多包涵

空班有什么可能的优势/用途?

PS:这个问题对你们中的一些人来说可能听起来很琐碎,但这只是为了学习目的,没有实际意义。仅供参考谷歌搜索没有帮助。

原文由 Ron 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 353
1 个回答

一种用途是在模板(元)编程中:例如, 迭代器标签 被实现为空类。这里的唯一目的是在编译时传递信息,以便您检查传递给例如模板函数的迭代器是否满足特定要求。

例子:

真的很 简化,只是为了想出一个主意。这里标记类的目的是决定使用哪种算法实现:

 class forward_iterator_tag {};
class random_access_iterator_tag {};

class MySimpleForwardIterator {
public:
  typedef typename forward_iterator_tag tag;
  // ...
};

class MySimpleRandomIterator {
public:
  typedef typename random_access_iterator_tag tag;
  // ...
};

template<class iterator, class tag>
void myfunc_int(iterator it, tag t) {
  // general implementation of myfunc
}

template<class iterator>
void myfunc_int<iterator, forward_iterator_tag>(iterator it) {
  // Implementation for forward iterators
}

template<class iterator>
void myfunc_int<iterator, random_access_iterator_tag>(iterator it) {
  // Implementation for random access iterators
}

template<class iterator>
void myfunc(iterator it) {
  myfunc_int<iterator, typename iterator::tag>(it);
}

(我希望我做对了,我已经有一段时间没有使用它了……)

使用此代码,您可以在任意迭代器上调用 myfunc ,并让编译器根据迭代器类型(即标记)选择正确的实现。

原文由 MartinStettner 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏