如何在函数实现之间进行交换?

mor*_*sef 7 c++ c++11

有没有办法在C++中实现两个函数实现之间的交换?

像这样的东西:

void printA(); // print a char
void printB(); // print b char

printA(); // output: a
printB(); // output: b

functionSwap(printA, printB);

printA(); // output: b
printB(); // output: a
Run Code Online (Sandbox Code Playgroud)

我想在ExitProcess功能上使用它.

lub*_*bgr 16

您可以将指向两个函数的指针绑定到两个变量中并交换它们.

void (*f1)() = printA;
void (*f2)() = printB;

f1(); // output: a
f2(); // output: b

std::swap(f1, f2);

f1(); // output: b
f2(); // output: a
Run Code Online (Sandbox Code Playgroud)

  • @hellow没有.`std :: function`是一个用于可调用对象的重型类型擦除容器.如果函数指针足够,请使用它. (13认同)

Mat*_*her 7

您需要将它们包装在对象(或指向函数的指针)中:

std::function<void()> myprintA = printA;
std::function<void()> myprintB = printB;

std::swap(myprintA, myprintB);

myprintA();
myprintB();
Run Code Online (Sandbox Code Playgroud)

否则,您正在使用符号本身,并且您无法交换它.