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