Better way to pass bool variable as parameter?

One other option is to use a class to hold the parameters where they're closely related:

struct AnimalOptions {
  bool hasHead, hasBody, hasLegs;
  AnimalOptions() : hasHead(false), hasBody(false), hasLegs(false);
}

...

AnimalOptions opt;
  opt.hasHead = true;

  animal(opt);

This technique is useful whenever you have a function which seems to take a bunch of parameters with identical types, whose order isn't easily remembered. It's just as useful when your function take several ints.


When I run into issues related to this I sometimes create an enum even when there are only 2 expected choices:

For example, instead of the following function declaration:

bool search(..., bool recursive);

I'd go with:

enum class SearchOpt
{
    Recursive,
    NonRecursive
};

bool search(..., SearchOpt opt);

Therefore, the calling syntax changes from:

bool found = search(..., true);

to:

bool found = search(..., SearchOpt::Recursive);

Note: this avoids you having to create your own constants every time you call the function.

Edit

As others have suggested, instead of having separate bools for each option and thereby a separate enum for each it would make sense to have a single enum configured as bit flags.


As a alternative to the other answers, I liked tagged_bool that Andrzej Krzemieński came up with on his blog.


Use flags:

  enum {
    HAS_LEGS = 0x01,
    HAS_HEAD = 0x02,
    HAS_BODY = 0x04,
  };

  void animal(int properties);

  animal(HAS_LEGS | HAS_HEAD);