我正在尝试在C ++中实现一个函数myprint
,它接受可变数量的参数 - 任意类型(可以是int,double或string) - 并用空格打印它们,以a结尾新队。例如,函数调用的以下实例都应该起作用:
myprint(a,b,c)
和
myprint(a,b,c,d)
其中a,b,c,d可以是任意类型(前面提到的那些)。我希望myprint
内部使用cout
进行打印而不是printf
。函数可以是宏函数而不是可变函数。我尝试了两种方法,但到目前为止还没有成功。在这方面的任何帮助将不胜感激。
我想要实现这样一个函数的目的是在用简单的函数调用调试代码时替换冗长和难以类型的cout
语句,从而节省时间并提高过程的可读性。
答案 0 :(得分:1)
使用可变参数模板非常简单。
template <typename Head>
void myprint(Head&& h) {
std::cout << h << std::endl;
}
template <typename Head, typename... Tail>
void myprint(Head&& h, Tail&&... t) {
std::cout << h << " ";
myprint(std::forward<Tail&&>(t)...);
}
像这样使用:
myprint(1, "Hello", 3.5, 0);
对于传递给<<
的所有类型,必须有myprint
的重载。
请参阅live example