当设置两个参数时,我需要调用一个函数“general_function()”。像:
.cpp文件
if (var_a == 1) {
general_function();
}
if (var_b == 1) {
generam_function();
}
general_function的定义是:
function general_function() {
// Some 40 lines
// Some 20 lines .. *
// Some 40 lines
}
现在,情况是在两次通话中,我用*标记的20行是不同的。因此,当设置var_a时,将执行一组20行,并且当设置var_b时,将执行另一组20行。
有很多方法可以克服这种情况。创建函数,传递参数等。但我想从OOP的世界做一些事情。这就是我在那里创建函数指针的原因。所以,这就是我所做的:
.h文件
bool function is_a_set(string str, char* name) {
// Do something
}
bool function is_b_set(string str, char* name) {
// Do something
}
.cpp文件
if (var_a == 1) {
general_function(is_a_set);
}
if (var_b == 1) {
general_function(is_b_set);
}
general_function的定义是:
function general_function(bool (*choice)(string, char*)) {
// Some 40 lines
choice(string, char*);
// Some 40 lines
}
我希望直到现在都清楚。但我确实得到了“错误:没有匹配函数来调用general_function()'
你能发现什么吗?
答案 0 :(得分:1)
为了避免函数指针的复杂性并以更多OOP方式解决这个问题,请考虑使用继承和虚函数。
class BaseThing
{
public:
bool generalFunction( )
{
// some 40 lines of code
specialMethod( );
// some other 40 lines of code
}
virtual void specialMethod( ) = 0;
};
class AThing : public BaseThing
{
public:
virtual void specialMethod( )
{
// special code for A
}
};
class BThing : public BaseThing
{
public:
virtual void specialMethod( )
{
// special code for B
}
};
然后在给定情况下使用您需要的对象:
BaseThing* thing = new AThing( );
thing->generalFunction( );
delete thing;
thing = new BThing( );
thing->generalFunction( );
答案 1 :(得分:0)
函数不是C ++中的关键字,而且函数指针声明错误,应该是
void general_function(bool (*choice)(string, char*)) {
/**/
}
答案 2 :(得分:0)
这是我可能会做的事情;请理解我在一段时间内没有使用标题或函数指针。
在课堂上:
private int var_a;
private int var_b;
在一般方法中:
void general_function()
{
//40 lines that run no matter which variable is set
if ( var_a == 1 )
{
//20 lines that run if var_a is set
//or better yet, call a submethod
}
//if var_a and var_b are mutually exclusive, use else if
if ( var_b == 1 )
{
//20 lines that run if var_b is set
//or better yet, call a submethod
}
//40 more lines that run no matter which variable is set
}