C++ dependency injection container