タイトルの通り、可変長引数で渡された値を空白区切りで出力する関数です。
競技プログラミングのデバッグ時に欲しかったので作りました。
C++
#include <iostream>
#define MY_ATCODER_DEBUG //提出時はコメントアウトする
#ifdef MY_ATCODER_DEBUG
#define DBG(...) debug_print(__VA_ARGS__)
#else
#define DBG(...)
#endif
template<class... Args>
void debug_print(Args... args) {
std::cout << std::endl;
}
template<class Head, class... Args>
void debug_print(Head head, Args... args) {
std::cout << head << ' ';
debug_print(args...);
}
※上記では、ソースコード内で「MY_ATCODER_DEBUG」マクロを定義していますが、
コンパイラオプションを使って定義すれば、提出時にコメントアウトせずに済みます。
VisualStudioでのプリプロセッサ定義の設定方法
##使い方
C++
using namespace std;
int main(){
int a = 20;
double b = 2.5;
string c = "文字列";
DBG(a, b, c);
return 0;
}
コンソール画面の出力
20 2.5 文字列
複数の型を混合して引数に渡すことができます。
##参考URL
https://leico.github.io/TechnicalNote/Cpp/variadic-template
(実は、こちらのサイトの内容をデバッグ用に整えただけで、私自身は理解しきれていません。)
(もっと良いやり方があれば、教えて下さい。)
##編集履歴
2020/3/25(水)
指摘を基に、定数「DEBUG」を「MY_ATCODER_DEBUG」に改名。
また、コンパイラオプションを使ったプリプロセッサ定義を追記しました。