One of things which is common when reading C++ code is their usage of typedef to simplify type name. I saw a lot of them.
Even STL's string uses typedef, as string is not a built-in type.

typedef basic_string<char, char_traits<char>, allocator<char> > string;

Yeah, it is long, but still easily readable.

Now if we have a factory method

Animal* createAnimal(const Continent&, const int, const std::string); 

and then we have a function which returns that factory method by string, and we insist not to use typedef

Animal* (* getAnimalFactory(std::string))(const Continent&, const int, const std::string);

Oh my God...

Just saying, in other static typed language it can be much simpler, though we can say it is not apple to apple comparison.

partial Func<Continent, int, string> getAnimalFactory(string id);