C ++在构造函数期间向地图添加“自身”

时间:2019-03-07 18:03:30

标签: c++

我是C ++的新手,有些困惑。我正在尝试在类初始化时将数据添加到std::map中,但是要注意的是我正在尝试添加要创建的类的实例。

示例:

namespace Test
{

    inline std::map<std::string, Doodad> testMap;

    class Doodad
    {
        public:
            Doodad(std::string test)
            {
                testMap["qwe"] = this;
            }
    };

}

现在这显然不起作用,因为Doodad尚未定义,所以我尝试了一些更hacky(可能是一个可怕,可怕的想法,但是我只是在玩弄它并学习如何一切正常)。

namespace Test
{

    class Hack
    {
    public: 
        Hack() {};
    };

    inline std::map<std::string, Hack> testMap;

    class Doodad: public Hack
    {
        public:
            Doodad(std::string test) : Hack()
            {
                testMap["qwe"] = this;
            }
    };

}

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

首先定义类,然后声明变量,然后定义函数:

class Doodad
{
    public:
        Doodad(std::string);
};

inline std::map<std::string, Doodad> testMap;

Doodad::Doodad(std::string) {
    testMap.emplace("qwe", *this);
}

P.S。 this是一个指针,因此您不能将其添加到其值不是指针的映射中。此外,您无法使用地图的operator[],因为Doodad无法默认构造。