c++ - 如何分别针对整型和浮点型专门化模板函数?

标签 c++ templates c++11

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

我猜积木是 std::enable_if , std::is_integral , std::is_floating_point .但我不能以一种优雅的方式将它们放在一起 :-( .

附言我有可用的 C++11。

最佳答案

参见 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

关于c++ - 如何分别针对整型和浮点型专门化模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21973389/

相关文章:

c++ - 在 C++ 中仅连接字符串中的选定元素

c++ - while 循环中不会发生随机化。如何解决这个问题? C++

c++ - 为什么我不需要在 C++20 中的依赖类型之前指定 "typename"?

google-app-engine - GAE Go 模板包中的条件语句

c# - 为具有大量依赖项的库创建包装器的正确方法

css - 如何为 8.5x11 英寸打印页面设置 CSS 格式

c++ - 模板成员函数和非模板重载的参数推导

c++ - chrono::steady_clock 是否在线程上阻塞?

c++ - 在 C++ 中,如何从声明中获取任意函数的类型?

c++ - std::variant 与里面的 std::nullptr_t 比较