c++映射容器[this]()

c++ map container [this] ()

本文关键字:this 映射 c++      更新时间:2023-10-16

我正在学习使用映射容器,我可以看到逻辑,我们可以在插入任何对象时定义键和值。我也知道我们可以用这些容器插入对,并且可以通过.first和.second访问内容。但是我不理解这段代码,如果可以的话,需要有人来启发我:

A级

#include"ClassB"
#include"ClassC"
class A
{
public:
    template<typename T>
    void foo1(classC::ID id);
private:
    ClassB::Ptr someFunction(classC::ID id);
private:
    //map 
    std::map<class::ID, std::function<classB::Ptr()>> mapName;
}
template<typename T>
void ClassA::foo1(classC::ID id)
{
    mapName[id] = [this]()  // <-------------- that [this]() ???
    {                       // Is this calling for that
                            // function<class::Ptr()> inside map??
        //TODO
    }
}

B.h类

#include"ClassC"
class B
{
    typedef std::unique_ptr<ClassB> Ptr;
public:
    classB(param1 from other classes , param2 from other classes);
    ....
}

C.h类

namespace States
{
    enum ID
    {
        foo,
        foo1,
        ...
    }
 }        

感谢

在您的示例中,"奇怪的部分"实际上与映射和访问器无关。这个This{/*TODO*/}是一个C++lambda表达式-一个没有参数的简单函数,可以访问"This"指针。

在这个例子中,map的用法是完全有序的——您只需访问带有关键字[id]的元素(如果它不存在,则创建它),然后将lambda函数(值)分配给这个关键字。如果您查看映射的定义,您可以看到,值类型实际上是std::function。有关此模板的更多信息,请访问http://www.cplusplus.com/reference/functional/function/