我知道这可能有点牵强,但我想知道是否有任何方法可以做到这一点:
我有一张功能图:
std::map<std::string, std::function<int(int)> > fnmap;
我想在这张地图上添加一些函数。
有没有办法装饰这些功能,以便我可以:
MAPNAME("FN") int fn(int param) {}
MAPNAME("FN2") int fn2(int param2) {}
..
应该导致fnmap["FN"] = &fn;
正如我上面所说,这有点延伸,但是,我觉得值得一提!
答案 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,因此他们无法引入您未提供的任何“上下文”。