找不到使用 bitset 实例化模板函数的有效方法

Unable to find a valid way to instantiate a template function using bitset

本文关键字:函数 有效 方法 bitset 实例化 找不到      更新时间:2023-10-16

>我有一个用 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);
}
相关文章: