宏从周围环境中获取输入

时间:2011-07-11 08:28:32

标签: c++ macros

我知道这可能有点牵强,但我想知道是否有任何方法可以做到这一点:

我有一张功能图:
std::map<std::string, std::function<int(int)> > fnmap;

我想在这张地图上添加一些函数。

有没有办法装饰这些功能,以便我可以:

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

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

应该导致fnmap["FN"] = &fn;

正如我上面所说,这有点延伸,但是,我觉得值得一提!

1 个答案:

答案 0 :(得分:0)

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,因此他们无法引入您未提供的任何“上下文”。