在声明它的方法中初始化静态std :: multimap

时间:2012-12-19 17:20:28

标签: c++ static initialization

我需要有静态多图,但我不想把它作为类字段,'我只需要在一个方法中使用它。我是这样编写的,但是在初始化函数内的其他方法是不是只有首次调用函数才会运行初始化代码?

static void someClass::someMethod(/**/)
{
    static multimap<int, char> err;

    if(err.size() == 0)
    {//initialize here
        err.insert(std::pair<int, char>(1, 'a'));
        err.insert(std::pair<int, char>(2, 'b'));
        err.insert(std::pair<int, char>(3, 'v'));
        err.insert(std::pair<int, char>(4, 'c'));
    }
    //method logic
}

2 个答案:

答案 0 :(得分:6)

如果您有C ++ 11编译器,则可以使用初始化列表:

static std::multimap<int, char> err = {
    { 1, 'a' },
    { 2, 'b' },
    { 3, 'v' },
    { 4, 'c' }
};

答案 1 :(得分:4)

编写一个函数,返回一个填充的multimap并调用函数:

multimap<int, char> create_err()
{
    multimap<int, char> err;
    err.insert(std::pair<int, char>(1, 'a'));
    err.insert(std::pair<int, char>(2, 'b'));
    err.insert(std::pair<int, char>(3, 'v'));
    err.insert(std::pair<int, char>(4, 'c'));
    return err;
}

static void someClass::someMethod(/**/)
{
    static multimap<int, char> err = create_err();
    //method logic
    //...
}