Можно ли написать макрос, который может принимать в переменное число аргументов и расширяется так:отладки макросов для C++ с переменными аргументами без форматирования строки
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'. Таким образом, аналогия неверна. Вы можете выполнить то, что вы сделали на Java, с вариативными шаблонами в C++ (или несколькими невариантными шаблонами). – ybungalobill
Что я сделал в Java, является аналогией для quickdebug2. И используя вариативные шаблоны, я не понимаю, как узнать размер и тип аргументов. Я хочу, чтобы я мог использовать его так же (что я могу сделать на Java): debug (42, «inner», 23.2) –