将参数隐式强制转换为布尔

Implicitly cast parameter to bool

本文关键字:转换 布尔 参数      更新时间:2023-10-16

前提:由于宏存在潜在问题,我正在尝试创建一个未使用宏实现的Define作用域。这是我第一次尝试

//version for if not defined
bool Defined()
{
return false
}
//version for if defined
bool Defined(bool anything)
{
return true;
}

以及一个示例用例

if(Defined(_DEBUG))
{
Stuff...
}

它将取代

#ifdef _DEBUG
Stuff...
#endif

#define Defined()         false
#define Defined(Anything) true

优点:
语法更干净,范围更广,

此代码不是有条件的,因此编译器将能够轻松地优化代码段

问题
此过程有几个问题,第一个是发布此帖子的原因。

问题:
不能传入任何不能隐式转换为bool的内容。有没有一种方法可以将任何对象、数字、指针等隐式转换为布尔?我不相信有,但在我继续之前,我想确定一下。

您可以使用通用模板:

template<class T>
bool Defined(T &&) { return true; }