我使用静态方法初始化类的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()
非常感谢!
答案 0 :(得分:2)
由于对象属于全球范围,因此问题是它正在设置'在std :: string类已经设置'?
之前
是
让你的字符串成为函数 - static
,通过某个函数的引用返回。
这是静态初始化命令惨败的传统修复方法。