gpt4 book ai didi

c++ - 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)

转载 作者:行者123 更新时间:2023-12-02 10:29:57 26 4
gpt4 key购买 nike

我的调试模板是:

#define ts to_string 
string ts(char c) { return string(1, c); }
string ts(bool b) { return b ? "true" : "false"; }
string ts(const char* s) { return (string)s; }
string ts(string s) { return s; }
template<class A> string ts(complex<A> c) {
stringstream ss; ss << c; return ss.str(); }
string ts(vector<bool> v) {
string res = "{"; for(int i = 0; i < si(v); ++i) res += char('0' + v[i]);
res += "}"; return res; }
template<size_t SZ> string ts(bitset<SZ> b) {
string res = ""; for(int i = 0; i < SZ; ++i) res += char('0' + b[i]);
return res; }
template<class A, class B> string ts(pair<A,B> p);
template<class T> string ts(T v) { // containers with begin(), end()
bool fst = 1; string res = "{";
for(const auto& x: v) {
if (!fst) res += ", ";
fst = 0; res += ts(x);
}
res += "}"; return res;
}
template<class A, class B> string ts(pair<A,B> p) {
return "(" + ts(p.f) + ", " + ts(p.s) + ")"; }

void DBG() { cerr << "]" << endl; }
template<class H, class... T> void DBG(H h, T... t) {
cerr << ts(h); if (sizeof...(t)) cerr << ", ";
DBG(t...); }
#ifdef LOCAL // compile with -DLOCAL
#define dbg(...) cerr << "[" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__)
#else
#define dbg(...) 0
#endif
当我打字
dbg(a, n);
其中“a”是 vector 名称,n是 vector 的大小。 “a”包含以下{1、2、3、4、5},n = 5
它打印
[a, n]: [{1, 2, 3, 4, 5}, 5]
但我要打印
[a]: [{1, 2, 3, 4, 5}]
[n]: [5]
无需键入
dbg(a);
dbg(n);
有什么办法吗?

最佳答案

When I type

dbg(a, n);

I want it to print

dbg(a);
dbg(n);

Is there any way to do this?
重载大量参数的宏,并在重载时为每个参数调用回调。
// renamed from dbg
#define dbg_in(...) cerr << "[" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__)

// overloads
#define dbg_1(_1) \
dbg_in(_1)
#define dbg_2(_1,_2) \
dbg_1(_1);dbg_in(_2)
#define dbg_3(_1,_2,_3) \
dbg_2(_1,_2);dbg_in(_3)
// etc.
#define dbg_N(_1,_2,_3,_4,_5,_6,_7,_8,_9,N,...) \
dbg_##N
#define dbg(...) \
dbg_N(__VA_ARGS__,9,8,7,6,5,4,3,2,1)(__VA_ARGS__)

dbg(a, b);
// expands to: dbg_in(a);dbg_in(b);

关于c++ - 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62616223/

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