模板的多个概念 class

multiple concepts for template class

我有下面的 class,但它只适用于浮点数。如何也添加整数?那是多个 requires 语句?或者有什么可以包含所有数字类型的东西吗?

或者有更好的方法?

#ifndef COMPLEX_H
#define COMPLEX_H

#include <concepts>
#include <iostream>

template <class T>
requires std::floating_point<T> // How to add integral, signed integral, etc
class Complex {
private:
    T re = 0;
    T im = 0;

public:
    Complex() {
        std::cout << "Complex: Default constructor" << std::endl;
    };

    Complex(T real) : re{re} {
        std::cout << "Complex: Constructing from assignement!" << std::endl;
    };

    bool operator<(const Complex<T>& other) {
        return re < other.re && im < other.im;
    }
};

#endif // COMPLEX_H

您可以||您的概念,例如

requires std::floating_point<T> || std::integral<T> 

你也可以这样创建一个概念

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

然后您可以将此概念用于您的 class

template <class T>
requires arithmetic<T>
class Complex
{
    ...

已经有一个 std::is_arithmetic 类型特征可以与你的 requires 子句一起使用:

#include <type_traits>

template <class T>
requires std::is_arithmetic_v<T>
class Complex
{
   ...

请注意,如果您为此使用自定义 Arithmetic 概念(我想标准库会在某个时候提供一个但说您不耐烦),那么写起来很干净:

template <Arithmetic T>
class Complex
{
    ...