【发布时间】:2011-12-25 11:26:10
【问题描述】:
是否可以编写一个可以接受可变数量参数并像这样扩展的宏:
quickdebug(a) -> cout << #a ": " << a;
quickdebug(a,b) -> cout << #a ": " << a << #b ": "<< b;
等
如果没有,我是否可以至少打印所有参数而不提供格式字符串。例如
quickdebug2(a) -> cout << a ;
quickdebug2(a,b) -> cout << a << " " << b ;
等
例如在 java 中,我可以编写一个提供类似功能的函数:
void debug(Object...args)
{
System.out.println(Arrays.deepToString(args));
}
【问题讨论】:
-
在 Java 中你不能做到
#a。所以这个比喻是不正确的。您可以使用 C++ 中的可变参数模板(或多个非可变参数模板)完成您在 Java 中所做的工作。 -
我在 Java 中所做的是对 quickdebug2 的类比。并且使用可变参数模板,我不明白如何找出参数的大小和类型。我的意思是我也希望能够像这样使用它(我可以在 Java 中这样做):debug(42, "inner", 23.2)
-
“使用可变参数模板,我不明白如何找出参数的大小和类型”呵呵?这就是可变参数模板的用途。
-
printfvariadic template in Wikipedia 就是一个例子。你的版本会是这样的:void quickdebug() { } template<typename A, typename... B> void quickdebug(A a, B... b) { std::cout << a; quickdebug(b...); }
标签: c++ debugging macros variadic-functions