stophin 2022-06-12 15:31 采纳率: 33.3%
浏览 25

模板特化后如何解决编译不过的问题

模板特化后如何解决编译不过的问题
现有一个库函数提供几个方法:

double get_double();
void set_double(double);
const char* get_string();
void set_string(const char*);

我自己在程序中使用了一个类型函数,比如

enum type {
DUBLE,
STRING,
};

(实际情况可能不止这两种类型)
现在我写了两个模板函数

template<typename T>
void set_value(type t, T value) {
 switch(t) {
  case DOUBLE:
    set_double((double)value);
    break;
  case STRING:
    set_string((const char*)value);
    break;
 }
}
template<typename T>
void get_value(type t, T& value) {
 switch(t) {
  case DOUBLE:
    value = (T)get_double();
    break;
  case STRING:
    value = (T)get_string();
    break;
 }
}

困扰我的问题是,看case中的强制类型转换,现在我的其他代码中如果不调用get_value/set_value则能编译通过
但是一旦我调用了set_value/get_value,比如

set_value<double>(type::DOUBLE, 10.0);

那么编译器立马提示,无法从“T”转换为“const char” / 无法从“const char”转为“T”,
这里T是double类型,问题是,我在这里只需要调用case DOUBLE:部分代码,但是编译器仍旧会
编译所有case分支代码,导致强制类型转换不通过
模板可能需要连库函数都是模板才能正常编译通过,但我没法更改库函数。
请问是我对库函数封装设计的问题,还是什么问题,可以不用模板解决这个问题吗?

  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 修改了问题 6月16日
      • 修改了问题 6月12日
      • 创建了问题 6月12日

      悬赏问题

      • ¥15 matlab数据信号处理问题
      • ¥15 为什么Js中函数还可以有实例对象?
      • ¥15 一块长方形的大布料截取若干个小的长方形布料,小长方形布料不能旋转,怎么使组成的不规则图形的长度最小?
      • ¥15 iPhone13视频通话屏幕闪黑
      • ¥15 linux平台中qt5对触屏操作偶尔不响应
      • ¥15 不使用zk实现双机clickhouse、kafka数据同步
      • ¥15 使用Labwindows/CVI程控万用表时自动切换量程
      • ¥15 Matlab修改xml参数后允许不了exe文件
      • ¥15 用flask框架接收前端上传的文本文件后怎么读取该文件
      • ¥15 有没有嵌入式ubuntu的朋友