c++ - 如何在 SQL 中创建类似 DECODE 函数的 C++ 宏?

标签 c++ macros

目前在 C++ 中,我必须编写这样的代码来转换值:

    if (a == 1) {
        b = "one";
    } else if (a == 2) {
        b = "two"
    } else if (a == 3) {
        b = "three"
    } else {
        b = "too_big"
    }

如何像在 SQL 中那样创建一个宏 DECODE,这样我就可以使用这样的代码:

b = DECODE(a, 1, "one", 2, "two", 3, "three", "too_big");

最佳答案

我对 C 有点生疏,并且会使用可变参数函数。但是有了宏...

首先是一个功能表达式(我希望):

b = (char* s[] = {"one", "two", "three", "too_big"}, 
     int n = sizeof(s) / sizeof(char*),
     s[(a >= n ? n : a) - 1]);

那会变成什么:

b = DECODE(a, { "one", "two", "three", "too_big" });

这不完全一样。

所以宏:

#define DECODE(a, sss) (char* s[] = sss, \
            int n = sizeof(s) / sizeof(char*), s[(a >= n ? n : a) - 1])

可变参数函数更好。 switch 语句是我的自然选择。或者:

 b = a == 1 ? "one"
   : a == 2 ? "two"
   : a == 3 ? "three"
   : "too_big";

关于c++ - 如何在 SQL 中创建类似 DECODE 函数的 C++ 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40187647/

相关文章:

c++ - std::getline() 将回车符\r 读取到字符串中,如何避免这种情况?

java - 使用 C++ 时找不到 native 方法

c++ - 如何在循环中迭代两个 vector

c - 在 C 中调试打印宏?

javascript - Sweet.js 表达式到字符串文字

android - 在带有外部 C++ 源的 Android Studio 中使用 NDK

c++ - 异常安全构造函数

c - C 中的宏用法?

ios - 将 UIColor 值分配给宏

c - 在宏函数中使用数值常量