gpt4 book ai didi

c++ - #defined 函数只能接受原始输入而不是变量?

转载 作者:行者123 更新时间:2023-11-30 01:37:43 25 4
gpt4 key购买 nike

我正在开发一个小型应用程序,我正在为其构建一个简单的 CLI。我希望我的 CLI 有一些颜色,因为谁喜欢无聊的旧的白色和黑色控制台? (jk 如果你这样做没有冒犯:))

然后,当我构建它时,我似乎遇到了一个问题,不幸的是,我不明白:(。问题在于一些借来的代码,这些代码应该通过包装所有的代码来帮助我清理代码必要的代码到整洁的小函数或定义中(你很快就会明白我在说什么)。我真的不知道定义在 C++ 中是如何工作的,或者至少是更高级的定义,但这是我目前用于包装的代码CLI 颜色代码作用于:

Colors.h

#ifndef _COLORS_
#define _COLORS_

/* FOREGROUND */
#define RST "\x1B[0m" // RESET
#define KRED "\x1B[31m" // RED
#define KGRN "\x1B[32m" // GREEN
#define KYEL "\x1B[33m" // YELLOW
#define KBLU "\x1B[34m" // BLUE
#define KMAG "\x1B[35m" // MAGENTA
#define KCYN "\x1B[36m" // CYAN
#define KWHT "\x1B[37m" // WHITE

#define FRED(x) KRED x RST
#define FGRN(x) KGRN x RST
#define FYEL(x) KYEL x RST
#define FBLU(x) KBLU x RST
#define FMAG(x) KMAG x RST
#define FCYN(x) KCYN x RST
#define FWHT(x) KWHT x RST

#define BOLD(x) "\x1B[1m" x RST // BOLD
#define UNDL(x) "\x1B[4m" x RST // UNDERLINE


#endif /* _COLORS_ */

所以问题是下面这个有效:

std::cout << FBLU("Hello, World. I'm blue!") << std::endl;

这不...

std::string randomString = "Hello, World. I'm blue!";
std::cout << FBLU(randomString) << std::endl;

同样,我不太熟悉“定义函数”的工作原理,但我只是想知道是否有人可以向我展示一种新方法,它接受原始文本输入和定义函数的变量输入。另外,如果您能帮助我理解定义在 C++ 中的工作原理,那也很棒。

最佳答案

宏的工作方式与将宏定义复制粘贴到使用它的地方一样。

所以这是可行的:

std::cout << FBLU("Hello, World. I'm blue!") << std::endl;
// same as
std::cout << "\x1B[34m" "Hello, World. I'm blue!" "\x1B[0m" << std::endl;
// same as
std::cout << "\x1B[34mHello, World. I'm blue!\x1B[0m" << std::endl;

(C++ 有一个规则,相邻的字符串文字连接在一起。我想添加这个规则是为了让你可以完全按照你在这里做的事情做)

这行不通:

std::string randomString = "Hello, World. I'm blue!";

std::cout << FBLU(randomString) << std::endl;
// same as
std::cout << "\x1B[34m" randomString "\x1B[0m" << std::endl;
// oops, syntax error

关于c++ - #defined 函数只能接受原始输入而不是变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49186833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com