声明 lambda 时<: 和 :> 是什么意思?
What do <: and :> mean when declaring a lambda?
我偶然发现了以下lambda语法,我不理解:
#include <iostream>
template<typename Callback>
void do_it(Callback callback) {
callback();
}
template<typename T>
void p() {
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
int main() {
auto a = <:&:> { };
p<decltype(a)>();
do_it(<:&:> { std::cout << "Hello" << std::endl; }); //this
}
上面的程序产生一个输出:
void p() [with T = main()::__lambda0]
Hello
你能解释一下<:&:> {/* ... */}
是什么意思吗?可以用这种方式声明一个带参数的lambda吗?
<:
和:>
是有向图。它们分别被翻译成[
和]
。因此,您的代码相当于:
auto a = [&] { };
do_it([&] { std::cout << "Hello" << std::endl; });
所以它只是一个lambda,通过引用捕获所有内容。
要声明一个接受这样一个参数的lambda,只需在捕获组后面添加一个参数列表:
auto a = <:&:> (AType) { };
如果你想让读你代码的人恨你,你可以尽可能使用有向图和三向图的组合:
auto a = <:&??)??<%>;
// ^ same as [&]{}
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思