大佬教程收集整理的这篇文章主要介绍了c – 使用模板函数生成的代码与普通函数之间的差异,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
long long countOdd(const std::vector<int>& v) { long long count = 0; const int size = v.size(); for(int i = 0; i < size; ++i) { if(v[i] & 1) { ++count; } } return count; } long long countEven(const std::vector<int>& v) { long long count = 0; const int size = v.size(); for(int i = 0; i < size; ++i) { if(0 == (v[i] & 1)) { ++count; } } return count; }
我的问题是我可以通过编写这样的单个模板函数来获得相同的结果:
template <bool countEven> long long countTemplate(const std::vector<int>& v1) { long long count = 0; const int size = v1.size(); for(int i = 0; i < size; ++i) { if(countEven) { if(v1[i] & 1) { ++count; } } else if(0 == (v1[i] & 1)) { ++count; } } return count; }
并使用它像这样:
int main() { if(somecondition) { countTemplate<true>(vec); //Count even } else { countTemplate<false>(vec); //Count odd } }
为模板和非模板版本生成的代码是否相同?还是会发出一些额外的指示?
请注意,数字的计数仅用于说明,因此请不要建议其他计数方法.
template <> long long countTemplate<true>(const std::vector<int>& v1) { long long count = 0; const int size = v1.size(); for(int i = 0; i < size; ++i) { if(true) { if(v1[i] & 1) { ++count; } } else if(0 == (v1[i] & 1)) { ++count; } } return count; } template <> long long countTemplate<false>(const std::vector<int>& v1) { long long count = 0; const int size = v1.size(); for(int i = 0; i < size; ++i) { if(false) { if(v1[i] & 1) { ++count; } } else if(0 == (v1[i] & 1)) { ++count; } } return count; }
以上是大佬教程为你收集整理的c – 使用模板函数生成的代码与普通函数之间的差异全部内容,希望文章能够帮你解决c – 使用模板函数生成的代码与普通函数之间的差异所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。