c++ - 将参数从一个函数传递到另一个函数(没有模板) - C++
问题描述
问题
有没有办法将参数从“发送者”函数传递给C++ 中的“接收者”函数?
期望/理论
void print(const char character) { std::putchar(character); }
void print(char message[], unsigned length) {
for (unsigned iterator = 0u; iterator ^ length; iterator += 1)
print(*(message + iterator));
}
void println(...) { print(...); print('\n'); std::fflush(stdout); }
在本例中:
•println
是“发送者”函数,
•print
是“接收者”函数。
该print
函数将接受该函数的所有参数,println
如示例...
语法所示。
语境
我确实知道 C++ 中的模板函数以及它如何将前一个示例纠正为
void print(const char);
void print(char[], unsigned); // They’ve been defined before already…
template <typename... types>
void println(types... arguments) { print(arguments...); print('\n'); std::fflush(stdout); }
但我想看看是否有另一种方法来解决这个问题——没有最近的C++特性,即:这个问题是如何在 C 中解决的?
我在 C++ 中以C 风格的方式(使用 C 特性而不是 C ++特性)进行编码,因为我想知道如何亲自构建 C++ 特性。
解决方案
这个问题是如何在 C 中解决的?
在 C 中使用宏。一个函数宏,只...
包含参数并将参数传递给函数:
#define println(...) do { \
print(__VA_ARGS__); \
print('\n'); \
std::fflush(stdout); \
} while(0)
有一个限制 - 根据 ISO C 标准,不允许在没有任何参数的情况下调用此类函数宏。
在 C中,通常使用gcc 扩展将##
预处理器运算符应用于函数__VA_ARGS__
并将附加参数传递给print
函数,例如__func__
或__LINE__
或__FILE__
用于调试目的。像前。这里或这里或这里(只是简短的谷歌搜索的几个初步结果)。
#define println(str, ...) do { \
print("%s:%d: " str "\n", __FILE__, __LINE__, ##__VA_ARGS__); \
fflush(stdout); \
} while(0)
推荐阅读
- laravel - 为 PHPUnit 测试设置 PhpStorm 远程调试的问题
- java - 为什么流行的 Java Base64 编码库使用 OutputStreams 进行编码,使用 InputStreams 进行编码?
- python - Python中递归函数的输出
- r - 合并两个数据框时无法填充列
- javascript - 如何防止同一事件被多次绘制?目前导致同一个事件的多层渲染
- javascript - 如何使用 npm dlv (JavaScript) 解析 JSON 对象中的数组
- mdx - 如何计算 MDX(蒙德里安)中计算度量的总百分比?
- javascript - 将 JavaScript 放在我的网站上是否会受到 XSS 注入等的影响?
- reactjs - Graphql mutation query : how to access the data elements
- r - Twitter 速率限制的界限:`reset` 字段