VC ++“重用”一个功能?

时间:2012-01-10 06:40:25

标签: c++

如何重新使用某个功能?

好的,我可以说下面有这个“主要”功能:

bool A = false;
bool B = true;
void MainFunction(bool Whatever) {
    if(!Whatever) {
        A = true;
        if(A) {
            B = false;
        } else if(!A) {
            B = true;
        }
    }
}

现在我想使用MainFunction创建一个新函数,如下所示:

MainFunction ANewFunction(false);
MainFunction AnotherNewFunction(true);

显然这不起作用,有没有办法将一个函数“重用”为一个不同的函数?

5 个答案:

答案 0 :(得分:4)

欢迎您使用一个函数调用另一个函数。例如:

void ANewFunction() {
  MainFunction(false);
}
void AnotherNewFunction() {
  MainFunction(true);
}

你甚至可以得到幻想:

#include <functional>
auto ANewFunction = std::bind(&MainFunction, false);
auto AnotherNewFunction = std::bind(&MainFunction, true);

无论哪种方式,您都可以拨打ANewFunctionAnotherNewFunction,并使用给定的参数调用MainFunction。 (在后一种情况下,它们不再是真正的函数。它们被称为函数对象,或仿函数,但你仍然像普通函数一样调用它们:ANewFunction()。)< / p>

答案 1 :(得分:1)

你不能“重复使用”功能,至少不能理解你的问题。

但是你可以创建一个调用原始函数的新函数,然后自己做一些额外的工作。例如:

void PrevFunction(int one)
{
    int i = one;
    // do whatever
}

void NewFunction(int one)
{
    PrevFunction(one);

    // do new stuff
    // ...
}

您还可以定义一个类,然后使用继承和virtual函数来修改基类中特定函数集的行为。

答案 2 :(得分:0)

只需从您的其他功能调用MainFunction?

void ANewFunction()
{
    MainFunction(false);
}
void AnotherNewFunction()
{
    MainFunction(true);
}

如果您的问题是如何使AnotherNewFunction引用与ANewFunction不同的A和B,答案是您不能,至少在没有MainFunction帮助的情况下。但是,您可以更新MainFunction:

void MainFunction(bool Whatever, bool& A, bool& B) {
    if(!Whatever) {
        A = true;
        if(A) {
            B = false;
        } else if(!A) {
            B = true;
        }
    }
}
bool A1 = false;
bool B1 = true;
void ANewFunction()
{
    MainFunction(false, A1, B1);
}
bool A2 = false;
bool B2 = true;
void AnotherNewFunction()
{
    MainFunction(true, A2, B2);
}

答案 3 :(得分:0)

typedef int (*function_t)(int); // new type - defines function type - address of function 


// your function, PrevFunction is simply variable holding address of the function:
int PrevFunction(int one) { return one; }

// new variable of type function_t initialized by PrevFunction address: 
function_t NewFunction = PrevFunction;

//And finally we can use either PrevFunction or NewFunction - they point to the same function body: 

int a = PrevFunction(1); // a == 1
int b = NewFunction(2); // a == 2

答案 4 :(得分:0)

另一个新奇的解决方案,使用 lambda的

auto ANewFunction = [](){ MainFunction(false); }
auto AnotherNewFunction = [](){ MainFunction(true); }