【发布时间】:2013-02-05 21:25:25
【问题描述】:
我正在使用 C++ 开发 API,并尝试/真的/努力不使用 RTTI(运行时类型信息)来实现一些依赖注入功能。
我相信我可以做到这一点,但是通过使用模板——但这让我想知道:
当模板被“扩展”并由编译器实现时,当模板类在框架库中实现时,它们是否实际上引入了循环依赖(编译时或运行时),以及该模板的客户端类在上层库中?
感谢您的帮助!
#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;
}
【问题讨论】:
-
看起来不像。你有什么错误吗?
-
这段代码应该做什么?
-
您的模板“在 Framework.lib 中实现”是什么意思?
templates 往往是(除了一些花哨的舞蹈)是一个纯粹的头文件结构。它们以什么方式在特定的库中“实现”? -
@Yakk 下面的答案之一谈到了编译单元,这就是我的意思。
-
Framework.lib几乎肯定不是编译单元的名称。有编译单元链接到libs,但libs 不是编译单元。
标签: c++ templates generics c++11 circular-dependency