VC++ "Re-use"函数吗?

  • 本文关键字:Re-use VC++ 函数 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);

显然,这是行不通的,那么有什么方法可以将一个函数"重用"为不同的函数吗?

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

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()。)

您不能"重用"函数,至少我不能理解您的问题。

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

void PrevFunction(int one)
{
    int i = one;
    // do whatever
}
void NewFunction(int one)
{
    PrevFunction(one);
    // do new stuff
    // ...
}

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

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

只需从其他函数调用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);
}

另一种新颖的解决方案,使用lambda的

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

最新更新