Невозможно найти правильный способ создания экземпляра функции шаблона с использованием bitset - PullRequest
0 голосов
/ 04 июня 2018

У меня есть функция шаблона, объявленная в 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);

Вот определение join2 в bit_tools.cc

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);

После попытки использовать join2 в main.cppЯ получаю ошибку компоновщика, как и ожидалось.Я читал о методах, которые включают помещение строки в файл .cpp, который создает экземпляр шаблона.Однако, учитывая, что у набора битов должен быть параметр шаблона нетипичного типа, я не уверен, что мне следует делать?

В идеале я хотел бы сделать что-то вроде этого

template std::bitset<int>  join2<int,int,int>(std::bitset<int> bsetA, std::bitset<int> bsetB)

Но это недопустимо

1 Ответ

0 голосов
/ 04 июня 2018

Следующий код работает для меня.Скомпилировано на 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);
}
...