我如何制作一个宏,它接受可变数量的参数,并使用 std::cout 打印出来?抱歉,如果这是一个新手问题,在搜索答案后找不到任何可以阐明可变参数宏的内容。
概念示例:
#include <iostream>
#define LOG(...) std::cout << ... << ... << std::endl
int main() {
LOG("example","output","filler","text");
return 0;
}
会输出:
exampleoutputfillertext
最佳答案
您不需要预处理器宏来执行此操作。可以写成普通的 C++。在 C++11/14 中:
#include <iostream>
#include <utility>
void log(){}
template<typename First, typename ...Rest>
void log(First && first, Rest && ...rest)
{
std::cout << std::forward<First>(first);
log(std::forward<Rest>(rest)...);
}
int main()
{
log("Hello", "brave","new","world!\n");
log("1", 2,std::string("3"),4.0,'\n');
}
在 C++17 中:
template<typename ...Args>
void log(Args && ...args)
{
(std::cout << ... << args);
}
就够了。 Live demo
输出:
Hellobravenewworld!
1234
研究 variadic templates , parameter packs 和 fold expressions 而不是可变参数宏,后者在现代 C++ 中很少有用。
关于c++ - 如何为 std::cout 制作可变参数宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326460/