假设我有一个枚举定义,例如:
// myenum.h
enum MyEnum {
First = 1,
Second,
Third,
TwoAgain = Second
};
Run Code Online (Sandbox Code Playgroud)
我想以编程方式从任何给定的枚举定义生成一个映射,其中键是枚举元素的名称,值是枚举元素的数值(例如myMap["TwoAgain"] == 2)
到目前为止,我知道如何使用遍历源文件clang_visitChildren(),并使用提取单个标记clang_tokenize().通过AST递归,我按以下顺序获取游标/标记:
我想我可以编写一个算法,使用这些信息来计算每个值.但是,我想知道是否有更简单的方法?我可以直接从libclang API获取数值吗?
对于一个库,我想要一个接受另一个函数及其参数的函数,然后将它们存储起来以便以后调用.参数必须允许任何类型的混合,但函数只需要返回void.像这样的东西:
void myFunc1(int arg1, float arg2);
void myFunc2(const char *arg1);
class DelayedCaller
{ ...
public:
static DelayedCaller *setup(Function func, …);
};
...
DelayedCaller* caller1 = DelayedCaller::setup(&myFunc1, 123, 45.6);
DelayedCaller* caller2 = DelayedCaller::setup(&myFunc2, "A string");
caller1->call(); // Calls myFunc1(), with arguments 123 and 45.6
caller2->call(); // Calls myFunc2(), with argument "A string"
Run Code Online (Sandbox Code Playgroud)
一种方法是让DelayedCaller :: setup()接受一个std :: function,让我的库用户在调用setup()之前使用std :: bind().但是,有没有办法实现setup(),以便用户不需要自己进行绑定?
编辑:DelayedCaller是一个现有的类.setup()是一个我想添加的新静态方法.