考虑函数template<typename T> void Fun(T t);
。对于整数类型和浮点类型,我如何有不同的实现?
我猜积木是std::enable_if
,std::is_integral
,std::is_floating_point
。但我不能用一种优雅的方式把它们放在一起。
我找到C++11了。
发布于 2014-02-23 19:36:36
请参阅如果 on 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
https://stackoverflow.com/questions/21973389
复制相似问题