![](/img/trans.png)
[英]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.