-5

当设置了两个参数时,我需要调用一个函数“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()”

你能发现什么吗?

4

3 回答 3

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( );
于 2013-09-11T18:26:17.540 回答
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
}
于 2013-09-11T18:21:46.243 回答
0

函数不是C++中的关键字,函数指针声明也是错误的,应该是

void general_function(bool (*choice)(string, char*)) {
   /**/
}
于 2013-09-11T18:18:01.597 回答