首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >c++映射容器[this] ()

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

Stack Overflow用户
提问于 2015-02-20 06:06:56
回答 1查看 87关注 0票数 0

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

ClassA.h

代码语言:javascript
运行
AI代码解释
复制
#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
    }
}

ClassB.h

代码语言:javascript
运行
AI代码解释
复制
#include"ClassC"

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

ClassC.h

代码语言:javascript
运行
AI代码解释
复制
namespace States
{
    enum ID
    {
        foo,
        foo1,
        ...
    }
 }        

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-20 06:32:05

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28630897

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文