我正在使用 C++ 开发 API,并且/真的/努力不使用 RTTI(运行时类型信息)来实现一些依赖注入(inject)功能。
我相信我可以做到这一点,但是通过使用模板——但这让我想知道:
当模板被编译器“扩展”和实现时,它们是否实际上引入了循环依赖(编译时或运行时),当模板类在框架库中实现时,以及该模板的客户端类在上层图书馆?
感谢您的帮助!
#include <string>
/************************************************************/
// Implemented in Framework.lib
namespace Framework
{
template<typename ShapeTemplateType>
class Utility
{
void Do()
{
ShapeTemplateType x;
(void) x;
}
};
} // End namespace Framework
/************************************************************/
// Implemented in Application.lib
namespace Application
{
class StateObject
{
int i;
};
class Facade
{
Framework::Utility<StateObject> state;
};
} // End Namespace Application
/********************************************************************/
// Implemented in Client
int main(int args, char* argv[])
{
Application::Facade facade;
//Derived d;
return 0;
}
最佳答案
模板的代码是在它被实例化的编译单元中生成的。在您的示例中,生成的机器代码将位于 Application.lib
中。
关于c++ - 编译器模板实现会引入循环依赖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717225/