相关疑难解决方法(0)

C/C++宏中的逗号

假设我们有这样的宏

#define FOO(type,name) type name
Run Code Online (Sandbox Code Playgroud)

我们可以使用哪个

FOO(int, int_var);
Run Code Online (Sandbox Code Playgroud)

但并不总是那么简单:

FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2
Run Code Online (Sandbox Code Playgroud)

我们当然可以这样做:

 typedef std::map<int, int> map_int_int_t;
 FOO(map_int_int_t, map_var); // OK
Run Code Online (Sandbox Code Playgroud)

这不是非常符合人体工程学的.必须处理类型不兼容的问题.知道如何用宏来解决这个问题吗?

c c++ macros c-preprocessor

93
推荐指数
4
解决办法
3万
查看次数

C++宏问题(逗号的解释)

以下代码编译正常.

#define CMD_MACRO(pp, cmd)  \
{           \
      if (pp)\
      { cmd; }        \
}

template<class T> void operate_on(T &data, char c) {
  data=data+1;
};

int main() {
  int book=4;
  char c;
    CMD_MACRO(book, {
        operate_on<int>(book, c);
    });
};
Run Code Online (Sandbox Code Playgroud)

请注意,我的代码中的实际宏更复杂,我给出了一个简化版本,这可能没有太大的逻辑意义

现在,如果我在函数中添加另一个模板参数,它会给出编译错误(代码注释中解释的问题):

template<class T, bool b> void operate_on(T &data, char c) {
  data=data+1;
};
int main() {
      int book=4;
      char c;
        CMD_MACRO(book, {
            operate_on<int, false>(book, c); /* here the "," between int and 
                  false is being treated 
                  as separating arguments to CMD_MACRO, 
                  instead …
Run Code Online (Sandbox Code Playgroud)

c++ syntax macros

2
推荐指数
1
解决办法
2227
查看次数

标签 统计

c++ ×2

macros ×2

c ×1

c-preprocessor ×1

syntax ×1