【发布时间】:2012-02-11 19:05:49
【问题描述】:
有没有更好的方法来“重载”这样的宏?我需要一个可以接受不同数量参数的宏。
#define DEBUG_TRACE_1(p1) std::string p[] = {p1}; log _log(__FUNCTION__, p, 1)
#define DEBUG_TRACE_2(p1, p2) std::string p[] = {p1, p2}; log _log(__FUNCTION__, p, 2)
#define DEBUG_TRACE_3(p1, p2, p3) std::string p[] = {p1, p2, p3}; log _log(__FUNCTION__, p, 3)
#define DEBUG_TRACE_4(p1, p2, p3, p4) std::string p[] = {p1, p2, p3, p4}; log _log(__FUNCTION__, p, 4)
#define DEBUG_TRACE_5(p1, p2, p3, p4, p5) std::string p[] = {p1, p2, p3, p4, p5}; log _log(__FUNCTION__, p, 5)
这样称呼
DEBUG_TRACE_2("more", "params");
【问题讨论】:
-
在 C++(不了解 ANSI C)宏处理器中有一些可变参数支持,但每次我尝试使用它时,我似乎都冒着导致已知宇宙内爆的风险。跨度>
-
#define DEBUG_TRACE(ar,n) std::string p[] = ar; log _log(__FUNCTION__,p,n),用DEBUG_TRACE({"more","params"},2);打电话太简单了?
标签: c++ c overloading c-preprocessor