stophin 2022-06-12 15:31 采纳率: 50%
浏览 43

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

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

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分支代码,导致强制类型转换不通过
模板可能需要连库函数都是模板才能正常编译通过,但我没法更改库函数。
请问是我对库函数封装设计的问题,还是什么问题,可以不用模板解决这个问题吗?

  • 写回答

2条回答 默认 最新

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 matlab解优化问题代码
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?