c++ - 编译器模板实现会引入循环依赖吗?

标签 c++ templates generics c++11 circular-dependency

我正在使用 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/

相关文章:

c++ - 使用 istream_iterator 遍历 int 和 string

c++ - QT/C++ 通过从变量中获取其名称来将属性设置为 QObject

c++ - 在 C++ 中关闭列出的可执行文件,代码执行一次而不是连续扫描

java - 通用可变参数的警告

c# - 在 C# 中将子类型列表作为父类(super class)型列表返回

c++ - 我想将 std::string 转换为 const wchar_t *

c++ - 多态,为什么我做不到?

c++ - SFINAE 的模板特化

模板中的 C++ 数据类型

Java——泛型;如果你想交换一个对象的 2 个项目,参数化一个方法有用吗?