静态方法初始化器中的空std :: string

时间:2017-05-15 20:12:05

标签: c++ class initialization c++14 static-initialization

我使用静态方法初始化类的const字段。静态方法使用一些存储在单独头文件中的const变量。原始类型正确传递给静态方法,但std :: strings被传递为空。我不明白为什么会这样。

在做了一些搜索之后,我偶然发现了一个叫做静态初始化惨败的东西,但是我无法将头缠绕在它周围,如果要责备它就无法解决问题。由于该对象属于全球范围,因此它正在设置的问题是:在std :: string类已经设置'?

之前

我试图复制下面的一个最小例子:

import json
from pymongo import MongoClient
from pprint import pprint


def main():
    with open('../config/database.json') as database_config:
        config = json.load(database_config)

    client = MongoClient(config["mongodb"])
    db = client[config["database"]]
    data = dict()

    data["collections"] = db.collection_names()

    for collection_name in db.collection_names():
        data[collection_name] = get_collection(db, collection_name)
    pprint(data)
    insert_data_to_file(data)


def get_collection(db, collection_name):
    collection_list = []
    collection = db[collection_name]
    cursor = collection.find({})
    for document in cursor:
        _id = document.pop('_id')
        document['_id'] = str(_id)
        collection_list.append(document)
    return collection_list


def insert_data_to_file(data):
    with open('database.json', 'x') as database:
        json.dump(data, database, sort_keys=True)


main()

非常感谢!

1 个答案:

答案 0 :(得分:2)

  

由于对象属于全球范围,因此问题是它正在设置'在std :: string类已经设置'?

之前

让你的字符串成为函数 - static,通过某个函数的引用返回。

这是静态初始化命令惨败的传统修复方法。