gpt4 book ai didi

c++ - 如何为 std::cout 制作可变参数宏?

转载 作者:可可西里 更新时间:2023-11-01 14:52:53 28 4
gpt4 key购买 nike

我如何制作一个宏,它接受可变数量的参数,并使用 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');
}

Live demo

在 C++17 中:

template<typename ...Args>
void log(Args && ...args)
{
(std::cout << ... << args);
}

就够了。 Live demo

输出:

Hellobravenewworld!
1234

研究 variadic templates , parameter packsfold expressions而不是可变参数宏,后者在现代 C++ 中很少有用。

关于c++ - 如何为 std::cout 制作可变参数宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326460/

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