宏从周围环境中获取输入

Macro taking input from surrounding context

本文关键字:获取 输入 周围环境      更新时间:2023-10-16

我知道这可能有点过分,但我想知道是否有什么方法可以很好地做到这一点:

我有一个函数映射:
std::map<std::string, std::function<int(int)> > fnmap;

还有一些我想添加到这个映射中的函数

有没有办法修饰一下函数,这样我就可以有:

MAPNAME("FN") int fn(int param) {}

MAPNAME("FN2") int fn2(int param2) {}. .

,结果应该是fnmap["FN"] = &fn;

正如我上面所说的,这有点牵强,但是,我认为值得一问!

struct Remember {
    static std::map<std::string, std::function<int(int)> > map;
    Remember (int (*f) (int), const char * name) {
        map [name] = f;
    }
};
// Needs anonymous namespace to be able to include it more than once in a header.
#define MAPNAME(x) namespace {Remember _##__LINE__ (x, #x);}
int f1 (int);
int f2 (int);
MAPNAME (f1)
MAPNAME (f2)

函数需要在调用MAPNAME之前声明,所以它不能算作装饰。

宏不理解C语言的styntax,所以他们不能拉入任何你没有给他们的"上下文"