gpt4 book ai didi

c++ - 数字类型的类模板

转载 作者:IT老高 更新时间:2023-10-28 12:42:54 26 4
gpt4 key购买 nike

如何编写只接受数字类型(intdoublefloat 等)作为模板的类模板?

最佳答案

您可以使用 std::is_arithmetic类型特征。如果您只想启用具有此类类型的类的实例化,请将其与 std::enable_if 结合使用。 :

#include <type_traits>

template<
typename T, //real type
typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type
> struct S{};

int main() {
S<int> s; //compiles
S<char*> s; //doesn't compile
}

对于更易于使用的enable_if版本,以及免费添加的disable_if,我强烈推荐阅读this wonderful article关于此事。

在 C++ 中,上述技术有一个名称,称为“替换失败不是错误”(大多数使用首字母缩写词 SFINAE)。您可以在 wikipedia 上阅读有关此 C++ 技术的更多信息。或 cppreference.com .

从 C++20 开始,concepts让这更容易,不要破坏界面:

#include <concepts>

template<typename T>
concept arithmetic = std::integral<T> or std::floating_point<T>;

template<typename T>
requires arithmetic<T>
struct S{};
// Shorthand: template<arithmetic T> struct S {};

请注意,有许多用户类型也需要在算术上使用,所以一个更一般的概念涵盖了您正在寻找的操作,而不是类型 您正在寻找的最好是通用接口(interface)。

关于c++ - 数字类型的类模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com