c++ - 模板化函数 编译时返回类型 无参数

标签 c++ templates

我有一个函数,现在可以为我返回特定类型的值。看起来像这样

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/

相关文章:

c++ - 移位和屏蔽 32 位值时 uint64_t 的未定义高位

c++ - GSL 的 Expects(cond) 对运行时的性能影响是什么?

html - 在不总是有内容的地方设计动态内容

C++ 在 { 标记之前期望类名,继承错误

python - django - 不显示模板文件中的更改

java - JasperReports,导出到 docx - 页脚格式

c++ - 如何安装cc-mode-5.32.3? (在 emacs 的 C++ 模式下高调)

c++ - C++ 的潜在语义分析/索引库

c++ - Boost.Coroutine 和 Boost.Coroutine2 的区别

c++ - 使用类属性调用具有非类型模板参数的模板函数