Сейчас имеется нечто вроде:
Object_Ptr create_object(const std::string& host, uint16_t port)
{
#ifdef WITH_PROTOCOL_A
try {
return Object_Ptr(new Object_A(host, port));
} catch (const Protocol_Exception&) {
// nil
}
#endif// WITH_PROTOCOL_A
#ifdef WITH_PROTOCOL_B
try {
return Object_Ptr(new Object_B(host, port));
} catch (const Protocol_Exception&) {
// nil
}
#endif// WITH_PROTOCOL_B
return Object_Ptr();
}