I have two suggestions, neither of which is perfect.
First is to modify your original function so that an alpha value of 00
results in the default alpha of 1.0:
uint32_t Color::hex(uint32_t a_hex, bool a_readAlphaBits = false) {
A = a_readAlphaBits || (a_hex & 0xff000000) ? ((a_hex >> 24) & 0xFF) / 255.0f : 1.0f;
R = ((a_hex >> 16) & 0xFF) / 255.0f;
G = ((a_hex >> 8) & 0xFF) / 255.0f;
B = ((a_hex)& 0xFF) / 255.0f;
return hex();
}
This leaves you with having to specify the extra parameter if you want any fully transparent color.
Now you can use a macro to specify both parameters, going by the number of digits.
#define C_HEX(x) 0x##x, (sizeof(#x)>7)