空班有什么可能的优势/用途? PS:这个问题对你们中的一些人来说可能听起来很琐碎,但这只是为了学习目的,没有实际意义。仅供参考谷歌搜索没有帮助。 原文由 Ron 发布,翻译遵循 CC BY-SA 4.0 许可协议
一种用途是在模板(元)编程中:例如, 迭代器标签 被实现为空类。这里的唯一目的是在编译时传递信息,以便您检查传递给例如模板函数的迭代器是否满足特定要求。 例子: 这 真的很 简化,只是为了想出一个主意。这里标记类的目的是决定使用哪种算法实现: 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 许可协议
一种用途是在模板(元)编程中:例如, 迭代器标签 被实现为空类。这里的唯一目的是在编译时传递信息,以便您检查传递给例如模板函数的迭代器是否满足特定要求。
例子:
这 真的很 简化,只是为了想出一个主意。这里标记类的目的是决定使用哪种算法实现:
(我希望我做对了,我已经有一段时间没有使用它了……)
使用此代码,您可以在任意迭代器上调用
myfunc
,并让编译器根据迭代器类型(即标记)选择正确的实现。