对类方法进行指针部分特化时出现“非法使用显式模板参数”

2024-06-26

您好,我在部分专业化方面遇到问题。我想要做的是拥有一个具有模板成员函数的类,该函数会将给定值解释为用户指定的值。例如类名是Value这是我想做的事情的一个片段:

int *ptr1 = new int;
*ptr1 = 10;
Value val1 = ptr1;
int *ptr2 = val1.getValue<int*>();

Value val2 = 1;
int testVal = val2.getValue<int>();

这是我实现此类的方法:

struct Value {

    Value(void *p) : val1(p){}
    Value(int i) : val2(i){}

    template<typename T>
    T getValue();

    void *val1;
    int val2;
};

template<typename T>
T*  Value::getValue<T*>() {
    return reinterpret_cast<T*>(val1);
}

template<>
int Value::getValue<int>() {
    return val2;
}

当我编译时,我收到以下错误:

错误 C2768:'Value::getValue':非法使用显式模板 论点

基本上它抱怨代码的指针模板部分:

template<typename T>
T* Value::getValue<T*>() {
    return reinterpret_cast<T*>(val1);
}

我知道这个问题可以通过一个简单的联合来实现,但是这段代码是一个更大代码的精简版本。

有人知道问题可能是什么吗?我想做的是将使用指针时的一段代码和不使用指针时的另一段代码分开。我真的很困惑,我总是调查而不是询问,但我还没有找到任何关于它的好信息。


函数模板不能部分专业化,但大多数时候,您可以使用委托到类技巧。在你的例子中,它会是这样的:

struct Value {
  template<typename T>
  T getValue() {
    return Impl_getValue<T>::call(*this);
  }
};

template <typename T>
struct Impl_getValue
{
  static T call(Value &v) {
    //primary template implementation
  }
};

template <typename T>
struct Impl_getValue<T*>
{
  static T* call(Value &v) {
    return reinterpret_cast<T*>(v.val1);
  }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对类方法进行指针部分特化时出现“非法使用显式模板参数” 的相关文章

  • 是否可以使静态控件透明?

    我正在尝试实现一个静态控件 该控件刷新 更改文本 以响应每秒发生一次的某个事件 由于我不想每秒绘制整个客户区域 所以我决定使用静态控件 现在的问题是父窗口被蒙皮 这意味着它有自定义位图作为背景 而静态控件没有适应 所以我正在寻找使静态控件的
  • 使用可加载内核模块修改帧缓冲区(/dev/graphics/fb0)参数

    Problem 我必须配置 Android 平台使用的各种 LCD 显示器 几乎在所有情况下 都没有针对感兴趣的 LCD 显示器免费提供的电气规格 但通过经验和逆向工程 可以很好地猜测参数 我正在尝试使用可加载内核模块来微调显示参数 也欢迎
  • 根据当前文化调用不同(本地化)视图

    我在用着LocalizationAttribute它实现了ActionFilterAttribute本地化视图 我简单地说 Localize 在控制器上 我使用 LocalizeStrings resx 文件根据当前线程上的语言进行应用 一
  • 以 ISO 8601 格式输出日期

    如何在 C 中获取以下格式的日期 2016 04 26T19 50 48Z include
  • HTML 文档

    有没有一个工具可以从 VS2010 生成的 XML 文档文件生成 HTML 页面 我在谷歌上搜索了这样的工具 但没有找到 我下载并安装了SandCastle 但我不明白如何使用它 尝试使用Sandcastle 帮助文件生成器 http sh
  • OWIN AuthenticationOptions 在 mvc5 应用程序中运行时更新

    Hi 情况如下 我在 iis 7 上有一个带有 Identity 2 的 MVC 5 应用程序 该应用程序为多个网站提供服务 主机名是某些网站的关键 网站 另一个网站 等等 我决定在我的所有网站上使用谷歌外部登录 每个网站都应该是带有个人
  • 在宏中使用 # [重复]

    这个问题在这里已经有答案了 请解释一下代码 include
  • C# Visual Studio 动态代码片段

    我正在开发一个 WinForms 项目 每天都会执行一些重复性的任务 所以我认为创建代码片段 https msdn microsoft com en us library ms165394 v vs 110 aspx会帮助我 但它仅适用于固
  • 多态性中基类缺少虚拟析构函数 = 资源泄漏?

    我们知道 如果要多态地使用基类 则需要将基类的析构函数指定为 virtual 否则程序中可能会出现资源泄漏 因为只会调用基类析构函数 而不会调用派生对象析构函数 我们还知道构造函数 析构函数纯粹是初始化 未初始化构造 而operator n
  • 如何将 QSerialPort 模块添加到 CMake 中?

    我想将 QSerialPort 模块添加到 CMake 中 根据我的理解 我需要将QT 串口添加到 pro中 我只想使用 CMake 所以我尝试编译简单的 CMake 文件 但有错误 QtCore 正在工作 qDebug 可以毫无问题地显示
  • 解析通过asp:FileUpload上传的XML文件

    我有一个场景 用户将上传 XML 文件 我想将该文件添加到数据库中的表中 不过 困难的部分是我需要解析文件 然后将一些信息添加到一些不同的表中 显示如何获取 XML 文件的每个示例都使用 URI 来获取文件 但是如何直接从数据库获取文件 或
  • OpenMP 循环数组访问中的错误共享

    我想利用 OpenMP 来并行执行我的任务 我需要将数组的所有元素减去相同的数量并将结果写入另一个向量中 两个数组都是动态分配的malloc第一个填充了文件中的值 每个元素都有类型uint64 t pragma omp parallel f
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • 除法时的小数舍入误差 (C#)

    我基本上有四个数字 比如 100 200 300 400 我需要计算概率为 100 100 200 300 400 200 100 200 300 400 等等在 当我使用小数数据类型来存储这些概率时 由于舍入问题 它们不会达到 1 在不使
  • 如何在 Windows 8.1 上打开多个 Visual Studio 窗口? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我使用的是 Windows 7 我能够启动多个 Visual Studio 并同时工作 现在我有 Windows 8 1 操作系统 每当我
  • 将 R 值传递给采用 L 值的函数时出现过载歧义

    我有 2 个重载函数 一个采用 L 值 另一个采用 R 值 目的是让该函数可以像这样调用 Obj obj foo obj OR foo Obj 所以 我写了2个重载函数 template
  • 如何进行平衡组捕获?

    假设我有这个文本输入 tes tR R abc aD mnoR xyz 我想提取 ff 输出 R abc R xyz D mnoR xyz R R abc aD mnoR xyz 目前 我只能使用平衡组方法提取组内的内容 如中所示msdn
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 如何以一对一/零关系更新员工和身份用户

    我正在尝试更新员工记录 也想更新身份用户 如果我先单独更新身份用户 例如 UserManager Update user Context Entry employee State System Data Entity EntityState

随机推荐

  • 如何在 Matlab 中绘制连通性/邻接矩阵图?

    我想在 MATLAB 中绘制网络 电网 的结构图 我有一个包含每个分支的往返节点的列表 我没有节点的坐标 并且每次模拟的系统拓扑都会发生变化 我还需要能够为各种线路 节点分配不同的颜色 以可视化电压问题或过载等 类似于我使用传记 下面的代码
  • Dozer 深度映射 Set 到 Set

    免责声明 同样的问题已经在这里被问过将深层属性与推土机中的中间集合映射 https stackoverflow com questions 2196680 mapping deep properties with intermediate
  • 创建具有子级别的类属性

    我一直在读这个topic https excelmacromastery com vba class modules A Quick Guide to the VBA Class Module关于如何使用类模块 我的目标是提高代码性能和可读
  • Pyspark 应用程序仅部分利用 dataproc 集群资源

    我的 pyspark 应用程序在 106 36 MB 数据集 817 270 条记录 上运行 UDF 使用常规 python lambda 函数大约需要 100 小时 我创建了一个 Google Dataproc 集群 其中包含 20 个工
  • Java 套接字:InputStream.read() 与 BufferedReader.read()

    我正在从套接字的输入流中读取数据 因为我正在动态解析传入的数据 所以我需要逐个字符地读取 Does BufferedReader read 与InputStream read 做 假设 BufferedReader 是以 InputStre
  • 我有两个 Foreach 循环,它们具有相同的枚举值。那么我该如何处理呢?

    我将两个变量声明为名为 a 和 b 的 对象 并有一个简单的 SQL 任务 select code from code list 使用完整结果集 我尝试将结果传递给声明的变量 a 和 b 并在脚本任务中使用它们 a和b 两个不同的 fore
  • 如何获取协议中的所有方法?

    如何获取 Smalltalk squeak pharo 中给定协议中所有 类 方法的集合 我正在尝试收集一组方法返回的值 我不想将方法存储在实例或类变量中 所以我想我可以将它们添加到协议中并以这种方式 标记 它们 Thanks 在 Phar
  • git checkout 裸露,并在接收后包含子模块

    如何在包含子模块的接收后挂钩中检出服务器上的裸存储库 我目前将其作为接收后挂钩 bin bash http blog ekynoxe com 2011 10 22 git post receive for multiple remote b
  • 错误:超时 - 未在指定的超时内调用异步回调....DEFAULT_TIMEOUT_INTERVAL

    我有一个有角度的服务类 angular module triggerTips service userData function rootScope http log firebase this log service userData S
  • 尝试安装 Rails 时,执行 gem ... (Gem::RemoteFetcher::FetchError) 503 错误

    这是当我尝试使用 Ruby 2 1 1 和 RVM 执行 gem install Rails v 4 1 0 时出现的错误 错误 执行 gem 时 Gem RemoteFetcher FetchError 错误 响应服务不可用 503 ht
  • 如何应用Spring 5中引入的PathPatternParser?

    我想创建一个GET将文件路径作为路径变量的请求 正如 Spring 文档中所述 发现here https docs spring io spring docs current javadoc api org springframework
  • setContentView 上的另一个资源$NotFoundException

    Stack Overflow 上有很多 Resources NotFoundException 问题 我已经查看了它们并尝试了各种建议 但均无济于事 我有一个完美的工作布局来显示一些图形 下面有一些按钮 我修改了一些按钮并开始出现此错误 我
  • Ostream << 重载混乱

    当您重载类的 ostream operator lt lt ostream s const SomeClass c whatever return s 当 ostream 已经可以通过引用直接修改时 返回 ostream 有什么好处 这对我
  • 交叉引用标头中出现“未终止条件指令”错误

    有两个类在其标头中彼此相关 绘图标记 ifndef PLOTMARKER H define PLOTMARKER H include
  • Django,如何在管理界面中查看会话数据

    我在用着Django 会话 http docs djangoproject com en 1 2 topics http sessions 我想要一种在管理界面中查看会话数据的方法 这可能吗 IE 对于每个会话 我想查看存储在会话数据库中的
  • 从图中删除颜色条

    这应该很容易 但我很难做到 基本上 我在 matplotlib 中有一个子图 每次调用函数时我都会在其中绘制十六进制图 但是每次调用该函数时我都会得到一个新的颜色条 所以我真正想做的是更新颜色条 不幸的是 这似乎不起作用 因为颜色条附加的对
  • 如何使用 EasyNetQ / RabbitMQ 进行错误处理

    我在 C 中使用 RabbitMQ 和 EasyNetQ 库 我在这里使用发布 订阅模式 我还有几个问题希望大家能帮助我解决 当使用消息时出现错误时 它会自动移至错误队列 如何实现重试 以便将其放回原始队列 并且当处理 X 次失败时 将其移
  • 跟踪已输出哪些 JSON 对象

    我通过将索引设置为 a 来随机输出 20 个左右的 JSON 对象randomNumber 最初是在页面加载时 我正在单独刷新已按 timeInterval 输出的每个 JSON 对象 为了跟踪已输出的 JSON 项目 我将每个项目的索引存
  • 在 JavaScript 中获取当前会话值?

    我有一个场景 我在浏览器中打开 Web 应用程序 但在两个单独的选项卡中 在一个选项卡中 我从应用程序注销 因此所有会话值都变为空 在另一个选项卡中 我单击了网络应用程序中的锚标记 在锚标记的 jquery on click 事件中 我检查
  • 对类方法进行指针部分特化时出现“非法使用显式模板参数”

    您好 我在部分专业化方面遇到问题 我想要做的是拥有一个具有模板成员函数的类 该函数会将给定值解释为用户指定的值 例如类名是Value这是我想做的事情的一个片段 int ptr1 new int ptr1 10 Value val1 ptr1