>我有一个用 bit_tools.h 声明的模板函数
template <size_t sizeA, size_t sizeB, size_t sizeAB>
std::bitset<sizeAB> join2(std::bitset<sizeA> bsetA,
std::bitset<sizeB> bsetB);
以下是 bit_tools.cc 中 join2 的定义
template <size_t sizeA, size_t sizeB, size_t sizeAB>
std::bitset<sizeAB> join2(std::bitset<sizeA> bsetA, std::bitset<sizeB> bsetB){
return std::bitset<sizeAB>(bsetA.to_string + bsetB.to_string);
尝试在main中使用join2后.cpp我按预期收到链接器错误。我已经阅读过涉及在实例化模板的文件中放置一行的方法.cpp。但是,鉴于位集必须具有非类型模板参数,我不确定我应该怎么做?
理想情况下,我会做这样的事情
template std::bitset<int> join2<int,int,int>(std::bitset<int> bsetA, std::bitset<int> bsetB)
但这是不合法的
以下代码对我有用。编译于 Vs2017 和 g++ 7.3 上
//
// bit_tools.h
//
#include <bitset>
template <size_t sizeA, size_t sizeB, size_t sizeAB>
std::bitset<sizeAB> join2(std::bitset<sizeA> bsetA,
std::bitset<sizeB> bsetB);
//
// bit_tools.cc
//
#include "bit_tools.h"
template <size_t sizeA, size_t sizeB, size_t sizeAB>
std::bitset<sizeAB> join2(std::bitset<sizeA> bsetA, std::bitset<sizeB> bsetB) {
return std::bitset<sizeAB>(bsetA.to_string() + bsetB.to_string());
}
// Here you should provide integer constants instead of type
template
std::bitset<32> join2<16,16,32>(std::bitset<16> bsetA, std::bitset<16> bsetB);
//
// main.cc
//
#include "bit_tools.h"
int main() {
std::bitset<16> bsetA;
std::bitset<16> bsetB;
join2<16,16,32>(bsetA, bsetB);
}