C ++模板可以(仅)匹配一种类型或单个其他类型的列表吗?

伍特·范·奥伊金(Wouter van Ooijen)

我想编写模板来构造一个输入端口。可以从单个输入输出端口或输入引脚列表中完成。我希望这些模板具有相同的名称。我对输入输出端口和输入引脚都有概念。我会写

template< typename... arguments > 
struct port_in ....

template< pin_in T > 
struct port_in<> ....

但是现在列表版本将接受任何类型。我可以在实现中进行检查,但这会降低用户传递不适合的类型时收到的错误消息。我可以以某种方式将列表限制为一种类型,但允许使用另一种类型的单个模板参数吗?

凯西

如果要确保用户始终收到合理的错误消息,则需要限制基本模板。假设您现有的概念分别命名为InputPinInputOutputPort,则可以约束基本模板以接受一系列输入引脚或单个输入/输出端口,如下所示:

template<class... Ts>
concept bool AllInputPins = (InputPin<Ts> && ...);

template<class... Ts>
concept bool OneInputOutputPort = sizeof...(Ts) == 1 && (InputOutputPort<Ts> && ...);

template <class... Args>
  requires AllInputPins<Args...> || OneInputOutputPort<Args...>
struct port_in {
  // ...
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以使用为某种类型指定的分配器在C ++中分配另一种类型的对象吗?

C++ 我可以将指针从一种类型转换为另一种类型,然后将其用作后者吗?有开销吗?

如何在C ++模板元编程中返回不止一种类型?

如何使用模板元编程在C ++ 17中将一种类型转换为另一种类型?

C#是一种类型安全的语言吗?我的例子怎么样

在 C# 中获取一种类型的对象

在C ++中将数据从一种类型转换为另一种类型?

C#-将异步任务从一种类型转换为另一种类型

在c#中将一种类型转换为另一种类型

C-char *模板是字符串的一种特殊类型吗?

在 C++ 中将一种结构类型分配给另一种类型

我可以编写一个可以在C中返回一种数据类型或另一种数据类型的函数吗?

我可以使用 C++ 模板来实现两个只有一种字段类型不同的类吗?

可以分配一种类型的指针并将其处置为其他类型但大小相同的指针吗?

C ++中的任务列表(一种以上类型的向量)

使用 C# 反射将一种类型的对象的值复制到另一种类型的对象

向量从一种类型隐式转换为另一种c ++

有没有一种方法可以推断出C ++中数组的单个元素的类型

使用C#SDK投影到另一种类型

C#中如何将其中一种类型作为方法的参数

在C#中将泛型强制转换为另一种类型

C#将ObservableCollection转换为另一种类型

C 灵活数组用另一种类型而不是 malloc 定义

有没有一种方法可以创建具有不同返回类型的c ++模板?

从列表中仅选择一种类型

C ++模板可以推断返回类型吗?

C ++模板专业化除一种以外的所有类型

C#将对象强制转换为存储在字符串变量中的另一种类型

我可以在C#中为一个参数接受多种类型吗?