C ++ 'sobrecarregando' a instrução if ()

É possível mudar o comportamento deif() de modo a:

class Foo {
    int x;
};

Foo foo;
if(foo)

só procede se o valor dex é algo diferente de zero? ou...

Uma conversão de tipo definido pelo usuário explícito para int work / seria uma abordagem apropriada? ou...

É melhor fazer algo comoif(foo.getX())?