使用显式实例化的模板链接共享库

时间:2017-04-03 17:27:06

标签: c++ templates cmake linker

我正在构建一个实例化一些模板代码的共享库。此模板代码使用其他模板(特征)。在相应的.cpp中,我明确地实例化了我想从该共享库中使用的模板。

在此之后,我链接到这个库,我使用那些实例化的函数,但是我收到链接器错误。

示例代码:

包括/ shared.cpp

#include <iostream>
#include "otro.hpp"

template<class T>
void tal(){
    std::cout << f<T, int>::value << std::endl;
}

包括/ otro.hpp

template<class T, class U>
struct f{};

template<class U>
struct f<int, U>{
    static constexpr char value[] = "chars";
};

的src / shared.cpp

#include "shared.hpp"
template void tal<int>();

的src / main.cpp中

#include "shared.hpp"
int main(){
    tal<int>();
}

的src /的CMakeLists.txt

add_library(${PROJECT_NAME} SHARED shared.cpp)
add_executable(foo main.cpp)
target_link_libraries(foo PRIVATE ${PROJECT_NAME})

备注:如果我将特征f的类型更改为int,则效果非常好。

0 个答案:

没有答案