我正在构建一个实例化一些模板代码的共享库。此模板代码使用其他模板(特征)。在相应的.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
,则效果非常好。