我有一个函数,现在可以为我返回特定类型的值。看起来像这样
template<typename T>
T getNullValue(){
if(std::is_same<T,long long>::value){
return NULL_LONG;
}else if(std::is_same<T,double>::value){
return NULL_DOUBLE;
}
}
这行得通,但我不喜欢它在运行时解析而不是在编译时解析,但这允许我这样做
double x = getNullValue<double>();
long long y = getNullValue<long long>();
我该怎么做才能根据我想要返回的内容重载不同版本的 getNullValue,而不必在运行时解决它。
getNullValue<type i need>();
最佳答案
模板特化应该能很好地解决问题。优化编译器应该将其转换为简单赋值。
// getNullValue.hpp :
template <class T>
T getNullValue() {
return 0;
}
// remember to declare specialization in header or strange linking errors may occur
template <> long long getNullValue<long long>()
template <> double getNullValue<double>()
// getNullValue.cpp:
template <> long long getNullValue<long long>() {
return NULL_LONG;
}
template <> double getNullValue<double>() {
return NULL_DOUBLE;
}
int main() {
double x = getNullValue<double>();
long long y = getNullValue<long long>();
}
参见 http://en.cppreference.com/w/cpp/language/template_specialization有关特化的更多示例。
关于c++ - 模板化函数 编译时返回类型 无参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755545/