c++11 - 显式实例化:为什么不起作用
问题描述
这是一个示例code
:
在我的标题中:
class SomeClass:
{
template <int N, typename ExtractedType>
bool ExtractDataFromArray(std::array<uint8_t, N> &ExtractFrom,
uint8_t StartBit, uint8_t BitLen, ExtractedType &out);
}
在我的 cpp 中:
template <int N, typename ExtractedType>
bool SomeClass::ExtractDataFromArray(std::array<uint8_t, N> &ExtractFrom,
uint8_t StartBit, uint8_t BitLen, ExtractedType &out) {
...<implementation for all> }
// instantiation for used later:
template bool SomeClass::ExtractDataFromArray<8, int>
(std::array<uint8_t, 8>, uint8_t, uint8_t, int &);
为什么它拒绝ExtractDataFromArray
为 pair实例化<8, int>
?
Error
是 :
template-id ‘ExtractDataFromArray<8, int>’ for ‘bool SomeClass::ExtractDataFromArray(std::array<unsigned char, 8ul>, uint8_t, uint8_t, int&)’ does not match any template declaration
template bool SomeClass::ExtractDataFromArray<8, int>
^
解决方案
尽管样本已更改了多种类型,但原始答案仍然解决了其中一个问题 - 更改template
为template<>
您的完整专业线。还总是提到编译器 - 以某种方式跳过<>
实际上是用 Visual Studio 2017 编译的,而 gcc 抱怨。
此外,正如@Irm29 在您现在更改的示例中所发现的那样,您的签名错误,您缺少第一个参数的参考。应该是std::array<uint8_t, 8>&
。
#include <iostream>
#include <array>
class SomeClass
{
template <int N, typename ExtractedType>
bool ExtractDataFromArray(std::array<uint8_t, N> &ExtractFrom,
uint8_t StartBit, uint8_t BitLen, ExtractedType &out);
};
template <int N, typename ExtractedType>
bool SomeClass::ExtractDataFromArray(std::array<uint8_t, N> &ExtractFrom,
uint8_t StartBit, uint8_t BitLen, ExtractedType &out)
{
return true;
}
template<>
bool SomeClass::ExtractDataFromArray<8, int>(std::array<uint8_t, 8>&, uint8_t, uint8_t, int &)
{
return false;
}
推荐阅读
- python - 在 Networkx Python 中找到最高中心度度量
- java - 使用 Java 获取终端(TTY、命令提示符)的大小
- plsql - 我正在尝试在 PL/SQL 中解析 XML。我无法从标签中检索属性值,我做错了什么?
- mysql - MySQL 查询需要帮助形成
- android - 如何在 React Native 中修复“无法运行 Jetifier”
- spring - Spring Data solr 将字段类型创建为 text_general 即使我们提到为字符串
- python - 从 S3 到 Sagemaker train 的 pytorch 脚本的图像路径
- javascript - 输入键触发点击事件
- javascript - 如何以角度制作动态间隔
- jquery - 点击时 Jquery 更改/设置链接参数