大佬教程收集整理的这篇文章主要介绍了c – 带有重载的显式模板函数特化:你为什么要这样做?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
template <typename T> void foo (T*); // #1 template <typename T> void foo (T); // #2 template <> void foo (int*); // #3
当引入也具有重载的基本模板的显式特化时,在设计的重载解析期间不考虑特化.我理解这一点.
但是,鉴于我可以使#3成为非模板重载,然后考虑重载解析,为什么我仍然想要像上面那样做呢?上面说明的设置是否有一个有效的用例?我唯一能想到的是,如果您不依赖于模板类型推导,则无法使用非模板函数,因为它们不接受<>调用它们时的语法.
顺便说一下,我只审查了C 03的规则.我不确定C 11是否/如何改变这些规则/行为.
以下模板函数是您可能希望显式选择要调用哪个函数的示例(尽管所有3个函数都采用相同的参数).
template <typename T> void foo (T*){std::cout << 1 << std::endl;} // #1 template <typename T> void foo (T){std::cout << 2 << std::endl;} // #2 template <> void foo<int> (int* X){std::cout << 3 << std::endl;} // #3 //void foo (int*){std::cout << 3 << std::endl;} // #3 template <typename T> void bar(void* X) { foo<T>(reinterpret_cast<T*>(X)); foo<T*>(reinterpret_cast<T*>(X)); foo(reinterpret_cast<T*>(X)); } int main() { cout << "Hello World" << endl; bar<int>(null); return 0; }
如果没有专门化,则输出1,2,3(显式实例化的调用与重载调用不同),而使用特殊化则获得3,3(显式实例化与隐式调用相同).
以上是大佬教程为你收集整理的c – 带有重载的显式模板函数特化:你为什么要这样做?全部内容,希望文章能够帮你解决c – 带有重载的显式模板函数特化:你为什么要这样做?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。