【发布时间】:2019-03-25 16:08:17
【问题描述】:
我正在尝试使用 Boost.Preprocessor 来做一些编译时工作。我想使用在其他宏中计算的值来索引表。当我尝试时,出现以下错误:“在宏 'BOOST_PP_BOOL_I' 中与 '(' 连接不会创建有效的令牌。”
这是产生问题的最简单的代码。
#define MY_TABLE (0, (1, BOOST_PP_NIL))
#define MY_INDEX_FUNCTION(x) (x)
void func() {
int y = BOOST_PP_LIST_AT(MY_TABLE, MY_INDEX_FUNCTION(0));
}
很容易确定删除MY_INDEX_FUNCTION 中的括号可以解决这种情况下的问题。我的实际代码使用更复杂的函数来计算更大表中的表索引。
有什么我可以做或改变的事情可以解决这个问题,使括号和更复杂的宏不会引起问题吗?
【问题讨论】: