Do编译器模板实现引入循环依赖项
Do Compiler Template Implementations Introduce Circular Dependencies?
我正在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;
}
模板的代码是在实例化它的编译单元中生成的。在您的示例中,生成的机器代码将在Application.lib
中。
您指的是循环模板依赖项,如:
template<class T>
using A = B<T>;
template<class T>
using B = A<T>;
int main()
{
A<int>;
}
这在声明A时失败,因为B不可用,如果你转发声明它,它会抱怨它不完整。
我认为模板中不可能有循环依赖关系,因为要进行实例化,每个模板参数都必须有一个完整的类型。鉴于此,模板实例化链必须是非循环的。
相关文章:
- C++GTKMM gui循环依赖关系
- 如何在头文件中声明类模板(由于循环依赖关系)
- 如何在具有循环依赖的类中dynamic_cast?
- C++模板方法中的循环依赖关系
- 修复循环依赖项 c++17 标头
- 涉及全局对象的循环依赖C++
- 循环依赖,在继承类的情况下使用覆盖方法
- Wt::D bo 中的循环依赖关系
- 在包含窗口标头时难以解决循环依赖关系问题
- 解决循环依赖关系 c++ 的想法
- C++循环依赖关系,未声明的标识符
- C++ 中的循环依赖关系问题
- 错误 C2512 视觉C++(并且不是循环依赖项)
- CMake 外部和内部静态库的循环依赖关系
- 正在从继承中解析循环依赖项
- "std::shared_ptr"循环依赖关系是如何导致问题的
- 纯引用而不是weak_ptr来打破循环依赖关系
- "invalid use of incomplete type" .解决循环依赖关系
- 如何避免模板方法的循环依赖
- 循环依赖结构,使用前向声明时结构的错误重定义