【发布时间】:2014-01-04 17:44:54
【问题描述】:
我想使用可变参数宏生成一个函数指针数组。这是一个例子。
预处理前:
#define MY_MACRO(mClassName, ...) ???
struct test {
void a() { }
void b() { }
void c() { }
};
MY_MACRO(test, a, b, c);
预处理后:
struct test {
void a() { }
void b() { }
void c() { }
};
void(test::*)() getMemFnPtr(int mIdx) {
static void(test::*)() fnPtrs[]{
&test::a,
&test::b,
&test::c
};
return fnPtrs[mIdx];
}
这可能吗?
基本上,我需要在数组扩展之前有一些东西,在数组扩展之后有一些东西,并为每个扩展的可变参数宏参数添加一个前缀。
【问题讨论】:
-
如果您接受支持的参数数量的特定限制,这是可能的。但这也相当复杂,请参阅this Q/A 以获得一些灵感:)
-
我认为类型应该是
void(test::*fnPtrs[])()。请请改用别名。 -
@DyP:我在真实代码中使用了别名 :)
-
@DanielFrey 你能发表你的评论作为答案吗?我愿意接受
-
这不公平,除了记住一些要搜索的关键字外,我几乎没有做任何工作。如果你想接受答案,应该是@DyP,使用 Boost.Preprocessor 绝非易事,我敢肯定他做了很多工作。
标签: c++ c++11 macros variadic-macros