C++ 如何使用宏将代码放入函数中?

C++ 如何使用宏将代码放入函数中?,c++,C++,假设我有一个函数 void foo() { foo1(); } 我想要一个宏,我可以在其他地方使用,比如: ADD_FUNCTION_TO_FOO(foo2()); 因此,函数foo()将与编译器的类似: void foo() { foo1(); foo2(); } 这有可能实现吗?或者有没有其他办法 您不能修改函数。foo()的定义永远都是它所做的 但是您可以首先编写foo以进行扩展: #include <functional> #include <vector>

假设我有一个函数

void foo()
{
foo1();
}
我想要一个宏,我可以在其他地方使用,比如:

ADD_FUNCTION_TO_FOO(foo2());
因此,函数foo()将与编译器的类似:

void foo()
{
foo1();
foo2();
}

这有可能实现吗?或者有没有其他办法

您不能修改函数。
foo()
的定义永远都是它所做的

但是您可以首先编写
foo
以进行扩展:

#include <functional>
#include <vector>
#include <iostream>

std::vector<std::function<void()>> extra_callbacks_for_foo;

void foo1();

void foo()
{
    foo1();
    for (auto& cb : extra_callbacks_for_foo)
        cb();
}

#define ADD_FUNCTION_TO_FOO(expr) \
  (extra_callbacks_for_foo.push_back([&]() { (expr); }))
#包括
#包括
#包括
std::向量额外的\u回调\u用于\u foo;
void foo1();
void foo()
{
foo1();
用于(自动和cb:extra_callbacks_for_foo)
cb();
}
#定义将函数添加到函数(expr)\
(额外的回拨用于回拨([&](){(expr);}))

请参阅。

不,这是不可能的。我的意思是,您可以首先编写
foo
,以获取默认为No op的lambda参数或类似的参数。但您不能重新打开函数并在以后更改它。您认为为什么要这样做?您应该真正更新
foo
函数以执行您希望它执行的任何操作。如果这是不可能的,那么您应该清楚地解释您的问题、您的期望以及为什么您不能使用显而易见的解决方案,即(1)修复不完整的函数
foo
或(2)定义一个函数
foo_new
,该函数满足您的需求,并改为调用该函数。您已经假设您的解决方案是好的,而不是清楚地解释您想要实现什么,以便我们可以为您提供适当的解决方案。