首页 > 解决方案 > 如何根据类型制作具有重载函数的模板?

问题描述

我遇到了一个 numeric_limits 静态方法。例如, numeric_limits::infinity(); 当我们执行 numeric_limits::infinity() 时给出无穷大,我们得到不同的结果。

我的理解是 infinity() 是 numeric_limits 类的静态方法。如果我想实现类似的机制,我该怎么做。如何制作一个模板类,该类将根据传递的类型返回不同的答案。

标签: c++

解决方案


您可以为您想要支持的每种类型提供一个特化,并为每个特化成员函数赋予相同的名称以返回不同的值,甚至是不同的类型。

#include <iostream>

template <typename T>
struct my_limits;

template <>
struct my_limits<int> {
    static constexpr int max() {
        return 2000;
    }
};

template <>
struct my_limits<char> {
    static constexpr char max() {
        return 127;
    }
};

int main() {
    std::cout << my_limits<int>::max() << ' ' << static_cast<int>(my_limits<char>::max());
}

推荐阅读