【发布时间】:2020-08-19 09:33:04
【问题描述】:
以这个概念为例 - 所有具有名为 func 的成员的类都应该满足这个概念。
template<class T>
concept has_func =
requires(T) {
{ [](T& t, auto&&... args){
t.func(args...);
}
};
};
struct STemplateFunc {
template<class T>
void func(T){};
};
template<has_func E>
void FuncFunc(E a) {}
int main() {
FuncFunc(STemplateFunc{});
}
这个技巧有什么问题吗 - 将 lambda 放入概念中或放入通用 lambda 或可变参数 lambda?
gcc 10.2 接受它:godbolt
【问题讨论】:
-
@dfri 谢谢!那篇文章 - Concepts can’t do quantifiers 是……启发我(因为没有更好的词)首先考虑在这个概念中填充一个 lambda。
-
但这有什么意义呢?
-
为什么需要这样的概念?我有一个类,其成员函数名为
func。你能用它做什么? -
另外,gcc 在 FuncFunc(5) 上发出的错误属于错误类型,即与违反约束无关。
标签: c++ c++20 c++-concepts