繁体   English   中英

VC ++“重用”功能?

[英]VC++ “Re-use” a function?

如何重用功能?

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

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函数来修改基类中一组特定函数的行为。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM