Casting a int as a enum

You need to think in terms of the function being called, not in terms of how to call the function. The function being called could be overloaded:

void Class::SetColor(Color newColor)
{
}

void Class::SetColor(int newColorNum)
{
}

Then, you can call instance.SetColor(White); or instance.SetColor(4);.