假设我有一个 C++20 模板 lambda:
auto foo = []<bool arg>() {
if constexpr(arg)
...
else
...
};
但是我该如何调用它呢?我似乎找不到语法描述。我尝试了通常的foo<true>();
和template foo<true>();
,然而gcc似乎都不喜欢。
foo.template operator()<true>();
这是正确的语法。您可以在godbolt.org上尝试一下。
这种奇怪的语法之所以存在,是因为:
foo
是一个实现了 template<bool> operator()
方法的通用 lambda 函数。foo.operator()<true>()
会将 <
解释为比较运算符。如果您想要略微更易读的语法,请尝试使用std::bool_constant
:
auto foo = []<bool arg>(std::bool_constant<arg>) {
...
};
foo(std::bool_constant<true>{});
在godbolt.org上试试吧。
[]<class T>(std::vector<T> const &vt)
),而不是直接将模板参数传递给函数。 - Nicol Bolas