cjiang3 发表于 2021-6-21 22:59:50

[已解决]一个参数的含义

本帖最后由 cjiang3 于 2021-6-24 23:00 编辑

情况1: 目前在法国读博, 面一家实习单位 ,面试题 没做出来, 耿耿于怀 ,虽然失败了 , 但题目还在
         (ta(某法国HR)给我讲了一个很大的故事,image 的stream processing 要确保同步, 实时什么的), 但关键不在这里,
         他从项目里抠了一个代码,(我从 #ifndef RunTests 看出来的) , 就下面代码, 全部, 在没有上下文和需求的情况下, 很难做出来,原题是要实现todo里的内容,10个小需求, 确保数据流。。。。。。
            介绍一下自己, 本人不是学渣, 有着多年C/C++, python 经验,opencv , ros方向,但看到这题后懵了,


本体集成了 ,container , iterator , template , 确实是项目中抠出来的代码 ,理解起来就很费劲 ,我把原题需求删了,只要大家回答我下面的问题 ,自己也会看一些 overstack上别人的解释,但觉得有必要这么复杂吗,(正因为,是项目源代码才觉得没老外这么写是有它的意义的),当然也不排除为了测试而测试, 把简单的东西搞复杂。。。


我的问题 :    const F1& f1, const F2& f2 ,看样子是传函数指针 ,      但传入的是
      

      [](const Event& e){
                std::cout << e.t << " [" << e.x << "," << e.y << "]" << std::endl;
        }


如何解释, ([] 是震惊到我的地方,之前没遇见过)

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <stdexcept>

struct Event {
        int x, y;             //position
        unsigned long long t; //timestamp
};

template <typename F1, typename F2>
void iterate(const std::vector<Event>& first_stream, const std::vector<Event>& second_stream, const F1& f1, const F2& f2) {
        // TODO
        //throw std::runtime_error("Implement me");
}

#ifndef RunTests
int main(int argc, char* argv[]) {
        std::vector<Event> first_stream{ Event{ 0, 1, 1 }, Event{ 0, 2, 2 }, Event{ 0, 3, 4 } };
        std::vector<Event> second_stream{ Event{ 1, 0, 1 }, Event{ 2, 0, 3 }, Event{ 3, 0, 4 } };
        iterate(first_stream, second_stream,
                [](const Event& e){
                std::cout << e.t << " [" << e.x << "," << e.y << "]" << std::endl;
        },
                [](const Event& e1, const Event& e2) {
                std::cout << e1.t << " [" << e1.x << "," << e1.y << "] [" << e2.x << "," << e2.y << "]" << std::endl;
        }
        );

        getchar();
}
#endif

cjiang3 发表于 2021-6-21 23:02:25

编译没问题 在vs2013上 , 但在devC++ 上 ,回报C++ 98 标准兼容性问题

cjiang3 发表于 2021-6-22 01:05:09

自己解决了

是一个lambda 表达式的传参形式 C++11 ,之前没遇见过 ,貌似全网就我一个回答(哈哈) ,希望以后遇到这个问题看到此贴的朋友可以说声感谢

https://docs.microsoft.com/en-us/cpp/cpp/lambda-expressions-in-cpp?view=msvc-160

是有些难度 , 这么用的人不多, 往往是在架构人员设计消息响应机制时候才用到 ,比如 传函数指针,但是 像这种情况,传整个函数的lambda表达式用的更少了 , 希望能够帮到那些想要挑战架构设计(变态难度)的同学 ,还有我自己

(看我鼠标指向, 和蓝色代码块)
我写了个简单函数 , 用lambda 表达式来传递 ,可以发现 成功了, 出题者用 const typename & param 来作为参数 的意愿是可以传任何lambda表达式(即任何函数,有参无参有返回无返回等等),即不受任何物理限制, 达到完全自由(很厉害,我是面试失败后才发现这一点的)。




cjiang3 发表于 2021-6-22 01:10:59

附上完整代码的图片



cjiang3 发表于 2021-6-22 05:40:33

本帖最后由 cjiang3 于 2021-6-22 05:48 编辑

https://fishc.com.cn/forum.php?mod=viewthread&tid=197875

我的这个问题的最终解决方案 ,
1) template + lambda 的联合使用
2)无捕获, 值捕获, 引用捕获
页: [1]
查看完整版本: [已解决]一个参数的含义