C++ C++;20 std::invocable语法
我想写这个C++ C++;20 std::invocable语法,c++,c++20,C++,C++20,我想写这个 template <typename F, typename... Args> requires std::invocable<F&, Args...> void applyFunction(F&& f, Args&&... args) { } …但它无法编译。我搜索了StackOverflow,但找不到如何使用正确的语法。 如何正确使用简洁的语法 更新:我发现这是可行的: templ
template <typename F, typename... Args> requires std::invocable<F&, Args...>
void applyFunction(F&& f, Args&&... args) {
}
…但它无法编译。我搜索了StackOverflow,但找不到如何使用正确的语法。
如何正确使用简洁的语法
更新:我发现这是可行的:
template <typename... Args, std::invocable<Args...> F>
void applyFunction(F&& f, Args&&... args) {
}
模板
void applyFunction(F&&F,Args&&…Args){
}
还是很丑。有更好的方法吗?在模板参数列表中使用概念代替
typename
,只有在替换概念的一个模板参数时才有效。具体来说,第一个
如果您有两个(或更多)共享关系的模板参数,则很可能需要一个requires
子句。你需要平静下来。实际上,将参数包放在函数前面,就像您在模板参数列表中所做的那样,会产生一些后果。用户在调用函数时几乎不可能直接指定可调用类型参数,因此用户将被迫依赖模板参数推断
不要仅仅因为只需少敲几下键盘就强迫语法工作。用对你所做的事情最有意义的方式来写,这样就可以最清楚地知道发生了什么。错误是什么?如果你在线搜索错误会怎么样?@UlrichEckhardt这是我能找到的最接近的,但是这种语法只允许使用固定数量的函数参数,而不是可变数量的参数。“without requires子句”为什么这么重要?使用
requires
子句是可以的。是的,它可以毫无问题地工作,但是人们可以说“谁需要概念
s?如果均衡,那么std::enable\u有什么问题吗?反正它工作得很好”。。我想写一个更干净、更短、更简洁的代码。@frozenca:“那么人们可以说”std::enable\u if\t Equiremistics有什么问题?不管怎样,它工作得很好“任何一个”说这都是错误的,因为使用enable\u if
体操有几个重大问题。概念的发明不仅仅是因为enable\u if
很冗长。
template <typename... Args, std::invocable<Args...> F>
void applyFunction(F&& f, Args&&... args) {
}