无法找到使用bitset

时间:2018-06-04 00:28:09

标签: c++ templates linker

我有一个在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)

但这不合法

1 个答案:

答案 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);
}