大佬教程收集整理的这篇文章主要介绍了c – 根据枚举调用适当的函数,但使用模板,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
void WrapperFunc( int iRealDataType,int iUseAsDataType ) { // Now call the right function based on both arguments switch ( iRealDataType ) { case FancyType1: switch ( iUseAsDataType ) { case CoolType1: DataAnalysisFunc_Fancy1_Cool1(); break; // etc. } // etc. } }
到目前为止,这是通过使用两个嵌套的switch语句然后为Real和UseAs数据类型的每个现有组合调用许多专用函数之一来解决的.但是,随着定义类型数量的增加,维护代码库是一场噩梦.所以我决定最终使用模板.如果可以的话,我主要是避开它们,但这次它们很适合这个问题.
所以现在我要调用DataAnalysisFunc< FancyType1,CoolType1>而不是DataAnalysisFunc_Fancy1_Cool1. ang摆脱了数百行switch语句,但我不能像这样使用它,因为FancyType1是枚举,而不是类型(例如Fancy1).
只是为了澄清 – 我知道这听起来像是一个愚蠢的人为例子,但我试图尽可能地简化问题以找到它的核心,而不是解释大量的细节,这将进入一个更具体的例子.
typedef void (*DataAnalysisFunC)(); const DataAnalysisFunc DataAnalysisFunctions[NumFancyTypes][NumCoolTypes] = { /*Fancy1*/ { /*Cool1*/ &dataAnalysisFunc_Fancy1_Cool1,/*Cool2*/ &dataAnalysisFunc_Fancy1_Cool2 } /*Fancy2*/ { /*Cool1*/ &dataAnalysisFunc_ImpossibleCombination,// can't happen,throw or something /*Cool2*/ &dataAnalysisFunc_Fancy2_Cool2 } }; void WrapperFunc(int realDataType,int useAsDataTypE) { assert(realDataType >= 0 && realDataType < NumFancyTypes); assert(useAsDataType >= 0 && useAsDataType < NumCoolTypes); (*DataAnalysisFunctions[realDataType][useAsDataType])(); }
现在,如果这些DataAnalysisFunc共享大量代码,模板可能会帮助您,但不能用于动态分派.
以上是大佬教程为你收集整理的c – 根据枚举调用适当的函数,但使用模板全部内容,希望文章能够帮你解决c – 根据枚举调用适当的函数,但使用模板所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。