我想编写模板来构造一个输入端口。可以从单个输入输出端口或输入引脚列表中完成。我希望这些模板具有相同的名称。我对输入输出端口和输入引脚都有概念。我会写
template< typename... arguments >
struct port_in ....
template< pin_in T >
struct port_in<> ....
但是现在列表版本将接受任何类型。我可以在实现中进行检查,但这会降低用户传递不适合的类型时收到的错误消息。我可以以某种方式将列表限制为一种类型,但允许使用另一种类型的单个模板参数吗?
如果要确保用户始终收到合理的错误消息,则需要限制基本模板。假设您现有的概念分别命名为InputPin
和InputOutputPort
,则可以约束基本模板以接受一系列输入引脚或单个输入/输出端口,如下所示:
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] 删除。
我来说两句