找不到使用 bitset 实例化模板函数的有效方法
Unable to find a valid way to instantiate a template function using bitset
>我有一个用 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);
}
相关文章:
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 递归函数有效,但无法记忆
- 将此布尔值传递给此函数的最有效方法是什么?
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- 我如何知道作为参数的size_t在函数中是否有效?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 文本 RPG - 使用函数检查有效的输入
- 将 C 函数转换为 C++ 以检查数字是否有效
- 函数参数的名称与调用函数时使用的变量相同是否有效?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 在函数中按值传递 unordered_map/unordered_set 是否有效? C++
- 我们如何并行运行算法的 n 个实例并以有效的方式计算结果函数的平均值?
- 仅当一个参数中未使用 std::function 时,模板函数替换才有效
- 为什么即使直接构造函数有效,template_back也会失败
- 不太清楚为什么我的递归链表删除函数有效?我很想解释一下
- 调用不带参数的构造函数有效,使用参数则无效。为什么?
- 为什么其中一个模板静态函数有效,而另一个不起作用
- 混合按引用传递和按值传递到可变参数模板函数有效
- 如何专门化模板类方法基于类型特征?使用std::enable_if对非类函数有效,但对类方法无效