【发布时间】:2015-05-15 20:50:31
【问题描述】:
我想了解是否有一种“优雅”的方式可以根据用户输入选择运行特定的 (c++) 类成员函数。
例如,假设我们有一个这样的类:
class myClass
{
int foo;
myClass(int input) { foo = input;}
void runMyFunction()
{
if ( foo == 1)
{
function1();
}
else if (foo == 2)
{
function2();
}
}
void function1();
void function2();
};
我想做的是,如果用户在构造函数中指定input=1,则在调用runMyFunction() 成员时调用function1(),但如果用户在构造函数中指定了input=2 ,然后应该调用function2()。
我的问题是,如果没有 if 声明,有没有更优雅的方法?动力是我不想让代码一遍又一遍地通过这个检查,因为我将在循环中使用这个调用。在这种情况下,是否有一种更优雅的方式来“设置”在没有if 语句的情况下将调用哪个函数?谢谢。
【问题讨论】:
-
你对函数指针感到满意吗?
-
您可以使用
std:map,其中键是可能的用户输入,值是您要执行的功能。 -
@Beta 我没用过,但如果这是个好方法,我现在愿意学习。
-
@Learnaholic 您的条件是在编译时评估,还是在运行时评估?
-
这些天使用现代编译器,我建议阅读
std::function、std::bind和 lambda expressions 而不是函数指针,而成员函数指针更糟糕。
标签: c++ class if-statement constructor member