2

我需要静态多图,但我不想将它作为类字段,因为我只需要一种方法。我是这样写的,但是在函数内部初始化这个映射是否有任何其他方法,初始化代码只会在第一次调用函数时运行?

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
}
4

2 回答 2

6

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

static std::multimap<int, char> err = {
    { 1, 'a' },
    { 2, 'b' },
    { 3, 'v' },
    { 4, 'c' }
};
于 2012-12-19T17:25:16.577 回答
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
    //...
}
于 2012-12-19T17:32:45.677 回答