代码之家  ›  专栏  ›  技术社区  ›  RocketSearcher

如何将模板功能限制为特定类型?[副本]

  •  1
  • RocketSearcher  · 技术社区  · 1 年前

    我有一个模板函数 template<typename T> foo (const T&); 我想限制 T 仅包含2种数据类型 myVec1 myVec2 ,其定义为

    using myVec1 = std::vector<int>;
    using myVec2 = std::vector<float>;
    

    当然,我在现实世界中的例子比这个复杂得多。

    例如,我知道概念是前进的道路

    template typename<T>
       requires std::floating_point<T>
    

    但是,我必须如何更改上述代码以允许这两个 vector 数据类型( myVec1 , myVec2 )而不是浮点型?

    1 回复  |  直到 1 年前
        1
  •  5
  •   JeJo    1 年前

    如何更改上述代码以允许使用两种向量数据类型而不是浮点数?

    您不修改 std::floating_point 因为它 contains other float types 此外 float . 因此,只需为场景编写自己的概念:

    using myVec1 = std::vector<int>;
    using myVec2 = std::vector<float>;
    
    template<typename T>
    concept MyVectorType = std::same_as<T, myVec1> || std::same_as<T, myVec2>;
    
    template<MyVectorType T> void foo(const T& vec) 
    {
        // ... implementation
    }
    

    或者只是使用 requires 约束类型 T 要么 int 浮动 .

    template<typename T>
       requires std::same_as<T, int> || std::same_as<T, float>
    void foo(const std::vector<T>& vec) 
    {
        // .... implementation
    }
    
    推荐文章