如何分别为整数和浮点类型专门设计模板函数?

时间:2014-02-23 19:32:11

标签: c++ templates c++11

考虑函数template<typename T> void Fun(T t);。 我怎样才能分别为整数和浮点类型实现它的不同实现?

我认为构建基块是std::enable_ifstd::is_integralstd::is_floating_point。但我不能以优雅的方式把它们放在一起:-(。

P.S。我得到了C ++ 11。

1 个答案:

答案 0 :(得分:7)

请参阅std::enable_if上的cppreference.com示例代码。

修改

修改上述链接中的代码,如下所示:

#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;。这为返回值类型提供了以下选项:

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