首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为整型和浮点型分别专门化模板函数?

如何为整型和浮点型分别专门化模板函数?
EN

Stack Overflow用户
提问于 2014-02-23 19:32:11
回答 1查看 758关注 0票数 4

考虑函数template<typename T> void Fun(T t);。对于整数类型和浮点类型,我如何有不同的实现?

我猜积木是std::enable_ifstd::is_integralstd::is_floating_point。但我不能用一种优雅的方式把它们放在一起。

我找到C++11了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-23 19:36:36

请参阅如果 on cppreference.com的示例代码。

编辑:

对上述链接中的代码作了如下修改:

代码语言:javascript
运行
复制
#include <type_traits>
#include <iostream>


template<class T>
typename std::enable_if<std::is_integral<T>::value>::type foo(T t) 
{
    std::cout << "is integral" << std::endl;
}

template<class T>
typename std::enable_if<std::is_floating_point<T>::value>::type foo(T t) 
{
    std::cout << "is real" << std::endl;
}

int main()
{
    foo(1); 
    foo(1.0);
}

enable_if的定义是template< bool B, class T = void > struct enable_if;。这为返回值类型提供了以下选项:

代码语言:javascript
运行
复制
template<class T>
typename std::enable_if<std::is_integral<T>::value>::type foo(T t) // void return type

template<class T>
typename std::enable_if<std::is_integral<T>::value, T>::type foo(T t) // return type from template parameter

template<class T>
typename std::enable_if<std::is_integral<T>::value, size_t>::type foo(T t) // fixed return type
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21973389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档