C++ 地图容器
c++ map container [this] ()
我正在学习使用地图容器,我可以看到逻辑,我们可以在插入任何对象时定义键和值。我也知道我们可以用这些容器插入对,并且可以通过 .first 和 .second 访问内容。但是我无法理解这段代码,如果可以的话,需要有人启发我:
ClassA.h
#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
#include"ClassC"
class B
{
typedef std::unique_ptr<ClassB> Ptr;
public:
classB(param1 from other classes , param2 from other classes);
....
}
ClassC.h
namespace States
{
enum ID
{
foo,
foo1,
...
}
}
谢谢
在您的示例中,"strange part" 实际上与映射和访问器无关。这个 this{/*TODO*/} 是一个 C++ lambda 表达式——一个没有参数的简单函数,可以访问 "this" 指针。
本例中 map 的用法完全是有序的——您只需访问带有键 [id] 的元素(如果它不存在则创建它),然后将 lambda 函数(值)分配给该键。如果查看映射的定义,您会发现值类型实际上是 std::function。您可以在 http://www.cplusplus.com/reference/functional/function/
下找到有关此模板的更多信息
我正在学习使用地图容器,我可以看到逻辑,我们可以在插入任何对象时定义键和值。我也知道我们可以用这些容器插入对,并且可以通过 .first 和 .second 访问内容。但是我无法理解这段代码,如果可以的话,需要有人启发我:
ClassA.h
#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
#include"ClassC"
class B
{
typedef std::unique_ptr<ClassB> Ptr;
public:
classB(param1 from other classes , param2 from other classes);
....
}
ClassC.h
namespace States
{
enum ID
{
foo,
foo1,
...
}
}
谢谢
在您的示例中,"strange part" 实际上与映射和访问器无关。这个 this{/*TODO*/} 是一个 C++ lambda 表达式——一个没有参数的简单函数,可以访问 "this" 指针。
本例中 map 的用法完全是有序的——您只需访问带有键 [id] 的元素(如果它不存在则创建它),然后将 lambda 函数(值)分配给该键。如果查看映射的定义,您会发现值类型实际上是 std::function。您可以在 http://www.cplusplus.com/reference/functional/function/
下找到有关此模板的更多信息