如何重新使用某个功能?
好的,我可以说下面有这个“主要”功能:
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);
显然这不起作用,有没有办法将一个函数“重用”为一个不同的函数?
答案 0 :(得分:4)
欢迎您使用一个函数调用另一个函数。例如:
void ANewFunction() {
MainFunction(false);
}
void AnotherNewFunction() {
MainFunction(true);
}
你甚至可以得到幻想:
#include <functional>
auto ANewFunction = std::bind(&MainFunction, false);
auto AnotherNewFunction = std::bind(&MainFunction, true);
无论哪种方式,您都可以拨打ANewFunction
或AnotherNewFunction
,并使用给定的参数调用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); }