我有一个在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.cpp中使用join2后,我得到了一个预期的链接器错误。我已经阅读了涉及在实例化模板的.cpp文件中添加一行的方法。但是,鉴于bitset必须有一个非类型模板参数我不确定我应该做什么?
理想情况下我会做这样的事情
template std::bitset<int> join2<int,int,int>(std::bitset<int> bsetA, std::bitset<int> bsetB)
但这不合法
答案 0 :(得分:0)
以下代码适合我。在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);
}