潜伏博士
https://www.scs.stanford.edu/~dm/blog/va-opt.html #CPP
#include <iostream>
using namespace std;



#define PARENS ()

#define EXPAND(...) EXPAND4(EXPAND4(EXPAND4(EXPAND4(__VA_ARGS__))))
#define EXPAND4(...) EXPAND3(EXPAND3(EXPAND3(EXPAND3(__VA_ARGS__))))
#define EXPAND3(...) EXPAND2(EXPAND2(EXPAND2(EXPAND2(__VA_ARGS__))))
#define EXPAND2(...) EXPAND1(EXPAND1(EXPAND1(EXPAND1(__VA_ARGS__))))
#define EXPAND1(...) __VA_ARGS__

#define LOG(tag, ...) log(tag, PREPEND_NAMES(__VA_ARGS__))
#define PREPEND_NAMES(...) __VA_OPT__(EXPAND(PREPEND_NAMES_IMPL(__VA_ARGS__)))
#define PREPEND_NAMES_IMPL(first, ...) \
    PREPEND_ITEM_NAME(first) __VA_OPT__(, PREPEND_NAMES_IMPL_AGAIN PARENS (__VA_ARGS__))
#define PREPEND_NAMES_IMPL_AGAIN() PREPEND_NAMES_IMPL
#define PREPEND_ITEM_NAME(item) #item " =", item, "|"

template<typename T, typename... Args>
void log(T tag, Args... args) {
    cout << tag << ' ';
    (..., (cout << args << ' ')) << endl;
}


int main() {
    int a, b, c, d, e;

    LOG("[nums]", a, b, c, d, e);
}


#CPP
成功了!
宏,好牛逼;宏,好傻逼。
 
 
Back to Top