【发布时间】:2015-02-20 14:06:56
【问题描述】:
我正在学习使用地图容器,我可以看到逻辑,我们可以在插入任何对象时定义键和值。我也知道我们可以使用这些容器插入对,并且可以通过 .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,
...
}
}
谢谢
【问题讨论】:
-
此代码不是有效的 C++。什么是
class::ID? -
我将其命名为类作为示例,您可以将其命名为任何您想要的名称,在我的示例中,它不是一个类,它是一个带有枚举的结构,所以 struct::ID 如果有意义的话给你。
-
@user3763930 -
function是某个班级的成员吗? -
不,我没有任何错误,我实际上是从 sfml 书中的示例代码中学习的,但我没有发布确切的代码块,但我可以更改它。所以这个话题奇怪地使用 [] 不适合我的答案。谢谢
-
@user3763930:关键是,您向我们展示的代码无法编译,因为
class是关键字。即使你使用了别的东西,比如Example,它仍然不是一段可编译的代码。也就是说,你给我们看的代码不可能是真实的,如果我们没有看到,就不可能知道代码是什么意思……
标签: c++ dictionary this containers