【发布时间】:2022-01-15 21:02:52
【问题描述】:
我有这个代码:
#ifdef _DEBUG
#define MY_VERY_SPECIAL_ASSERT(x, ...) assert(x && __VA_ARGS__)
#else
#define MY_VERY_SPECIAL_ASSERT(x, ...)
#endif
这正是它应该做的。但是,为了永远继续学习,我正在努力遵守 core-cpp 集中的constexpr variadic 模板指南。
我已经尝试了一些排列,但这个似乎是最“正确”的
#ifdef _DEBUG
template<typename T>
constexpr void MY_VERY_SPECIAL_ASSERT(T x, const std::string &msg) {
assert(x && msg);
}
#else
template<typename T>
constexpr void MY_VERY_SPECIAL_ASSERT(T x, const std::string &msg) { }
#endif
当然,它不想编译。具体来说,“T”和字符串没有逻辑和重载,这是有道理的。你会认为它总是返回 true,对吧?
无论如何,如果有人在这里有任何指示,我很高兴了解有关模板的更多信息。 =)
【问题讨论】:
-
不知道代码应该做什么!是否要检查条件并中止执行但之前输出消息?
-
就是这样。我见过
assert([test] && "msg")经常使用。