根据条件运行特定版本的函数
Running a specific version of a function dependent on condition?
我不擅长解释事情,所以我也要尽力而为。在C++中,是否有任何方法可以使函数的版本根据特定条件运行?我知道如果我做虚拟功能,我可以做如下事情:
virtual int thisFunction()
thisFunction(int, string)
thisFunction(int,int)
这只是凭记忆,但我想知道我是否可以根据某个条件做到这一点? 例如,如果您有显示菜单的功能,请根据权限级别进行更改?只是不在if
声明中的东西。
我想到了两个好方法。
使用开关语句:
switch(permission)
{
case 1: displayMenu1();break;
case 2: displayMenu2();break;
case 3: displayMenu3();break;
};
使用函数指针数组:
typedef void (*displayfunc)() ;
displayfunc displayfuncs[] =
{
displayMenu1,
displayMenu2,
displayMenu3
};
用法:
displayfuncs[permissions]();
如果不能在调用函数的方法中使用 if 语句或 case 语句,则可以将权限级别(或条件所依赖的任何其他值(作为参数传递给函数,并在函数中编写逻辑来处理任何权限级别。
您可以通过重载来处理不同的函数参数类型,只需像重载一样多次定义函数,唯一的变化是参数的类型。
相关文章:
- 用符号版本替换对函数的所有调用
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 用非纯虚拟版本重载纯虚函数
- 重载模板函数未为特定类型选择正确的版本
- Python 的 exec() 函数的 C++ 版本
- "std::function"的简单版本:函数对象的生存期?
- C++14 及更高版本是否允许 Lambda 函数的默认参数?如果是这样,怎么办?
- 在h文件上内联发布版本并在cpp上实现调试版本的函数
- 我可以删除对象的右值版本的函数吗?
- 传递 const int* 和 int* 时调用重载函数的不同版本(const int* const&/&&)
- 触发的断点(析构函数)与类模板类型是自身的一个版本
- opengl32.lib如何在Windows(仅1.1版本)上工作?它是否真正实现了OpenGL函数
- C++14 强制转换以返回成员函数的类型 - 简洁版本
- 所有版本的 GCC 都与默认成员初始值设定项作斗争,该初始值设定项捕获了这一点,并结合了继承的构造函数
- 根据运行时参数调用模板函数的不同版本
- 函数的内联版本返回的值与非内联版本不同
- 如何从非递归版本定义斐波那契函数
- 如何避免const版本函数的代码重复