目前在 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/