[英]How to initialize a reference member variable inside a member function & access it inside other member functions - C++
[英]C++ — how to initialize the static variable inside a member function?
void ClassA::Func()
{
static map<int, string> mapIntStr;
mapIntStr[0] = m_memberVariable0; <= just want to do once & m_memberVariable* are not static
mapIntStr[1] = m_memberVariable1; <= just want to do once
...
}
我只想初始化變量mapIntStr一次。 眾所周知,我們可以將初始化代碼放入靜態函數中,然后調用該靜態函數並將返回值存儲到mapIntStr中。
在這里,我想得到一個快速而骯臟的解決方案。 我記得有一種叫做靜態作用域的東西。 我想在不調用靜態函數的情況下初始化mapIntStr ONCE。 我該怎么做?
謝謝
void ClassA::Func()
{
static map<int, string> mapIntStr;
if(mapIntStr.empty()){
mapIntStr[0] = m_memberVariable0;
mapIntStr[1] = m_memberVariable1;
// ...
}
}
那個怎么樣? :)
編輯
好吧,最好的解決方案是將mapIntStr
移出函數並進入類。 然后,您將無法解決靜態函數調用。
//in ClassA.h
class ClassA{
public:
void Func();
static map<int,string> InitStatic();
static map<int,string> mapIntStr;
};
//in ClassA.cpp
#include "ClassA.h"
void ClassA::Func(){
// use mapIntStr
}
map<int,string> ClassA::InitStatic(){
map<int,string> ret;
// init ret
return ret;
}
map<int,string> ClassA::mapIntStr = ClassA::InitStatic();
那是我所知道的唯一選擇。 因此,您可以選擇。 首次創建ClassA
對象(這是兩個版本的更好版本)時,首先在函數中或什至在構造器中初始化地圖,並以幾乎沒有操作的方式調用empty()
,這很可能是一條指令僅在適當的內聯之后,才不會增加任何開銷,或使用靜態初始化函數。
創建一個內部結構,然后初始化該結構的構造函數中的所有內容,然后聲明該結構的靜態變量。
void fun()
{
struct setter
{
setter(){}
};
static setter setup;
}
對於您的情況:
void ClassA::Func()
{
struct Map : public std::map<int, string>
{
Map()
{
(*this)[0] = something;
(*this)[1] = somethingElse;
}
}
static Map map;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.