如何使用模板类型声明概念函数签名?
How to declare concept function signature with a template type?
有没有办法让概念函数签名具有模板参数?
像这样:
template<typename SomeTypeT, typename U>
concept SomeType = requires(SomeTypeT s) {
{ s.SomeFunction<U>() };
};
?
显示的概念定义有效,只是您需要告诉编译器 SomeFunction
是一个模板:
template<typename SomeTypeT, typename U>
concept SomeType = requires(SomeTypeT s) {
{ s.template SomeFunction<U>() };
};
如果你想在模板定义中引用依赖名称的模板成员,而不是特定于概念,这总是必要的。解析定义时,编译器还不知道 s
是什么类型,因此无法知道 SomeFunction
应该是一个模板。但它需要知道,因为尖括号和整个表达式的含义可以依赖于它。
有没有办法让概念函数签名具有模板参数?
像这样:
template<typename SomeTypeT, typename U>
concept SomeType = requires(SomeTypeT s) {
{ s.SomeFunction<U>() };
};
?
显示的概念定义有效,只是您需要告诉编译器 SomeFunction
是一个模板:
template<typename SomeTypeT, typename U>
concept SomeType = requires(SomeTypeT s) {
{ s.template SomeFunction<U>() };
};
如果你想在模板定义中引用依赖名称的模板成员,而不是特定于概念,这总是必要的。解析定义时,编译器还不知道 s
是什么类型,因此无法知道 SomeFunction
应该是一个模板。但它需要知道,因为尖括号和整个表达式的含义可以依赖于它。