将参数隐式转换为布尔

时间:2018-07-31 18:04:43

标签: c++ casting

前提: 由于宏的潜在问题,我试图使一个未使用宏实现的定义范围。这是我最初的尝试

//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

优点:
语法更清晰,范围更广,

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

问题
此过程存在一些问题,第一个是发布此帖子的原因。

问题:
您不能传递任何无法隐式转换为布尔值的内容。有没有一种方法可以将任何对象,数字,指针等隐式转换为布尔值?我不相信那里,但是我想确定一下,然后再继续。

1 个答案:

答案 0 :(得分:3)

您可以使用通用模板:

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