• C++的模板类:不能将定义与声明写在不同文件中


    问题来源

    今天看了orbslam2自带的第三方库DBoW2的TemplatedVocabulary.h文件,发现其中模板类的函数成员的定义与声明放在了同一个文件;同时发现,DBoW2的CMakeLists.txt并没有把TemplatedVocabulary.h的实现放入到libDBoW2.so之中。

    所以含TemplatedVocabulary.h的文件需要再手动链接TemplatedVocabulary.h需要的库。

    既然如此,我就”自作聪明“,新建了TemplatedVocabulary.cpp文件,把TemplatedVocabulary.h的实现写在了其中,在CMakeLists.txt中把TemplatedVocabulary.cpp加入了库文件libDBoW2.so中,这样就不用再手动链接TemplatedVocabulary.h需要的库了。然而,在链接libDBoW2.so库的时候出现了错误!!

    原因

    模板类需要指定类型,指定不同的类型,函数成员实现就不一样;所以在编译的时候需要根据指定的类型来加载相应的函数实现,而不是链接没有指定类型的库文件模板函数。

  • 相关阅读:
    ThreadLocal内存泄漏真因探究(转)
    JAVA设计模式工厂模式
    java设计模式单例模式
    Java-Socket
    Java-Queue总结
    Java-Reentrantlock
    Java-Iterator遍历集合
    安装和启动docker
    C# System.Reflection.Assembly动态加载资源文件
    C#调用 kernel32.dll
  • 原文地址:https://www.cnblogs.com/liuzhenbo/p/12254986.html
Copyright © 2020-2023  润新知