简体   繁体   中英

Implicitly cast parameter to bool

Premise: I am trying to make a Define scope that is not implemented using a macro because of the potential issues with macros. Here is my initial attempt

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

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

And an example use case

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

which would replace

#ifdef _DEBUG
    Stuff...
#endif

or

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

Benefits:
syntax is cleaner, it is scoped,

This code is not conditional, so the compiler will be able to easily optimize code sections out.

Issues
There are a few issues with this procedure, the first is the reason for this post.

Question:
You can't pass in anything that is not implicitly cast-able to a bool. Is there a way to implicitly cast any object, number, pointer, etc to a bool? I don't believe there is, but I wanted to make sure, before I continued.

You can use a generic template:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM