【发布时间】:2021-12-31 00:30:15
【问题描述】:
现在我正在创建一个静态类(是的,c++ 没有静态类,但据我所知,使用私有构造函数创建一个类会得到相同的结果),如下所示返回给我一张地图:
class Foo()
{
public:
static std::map<MyEnum, SomeInfo> getMap()
{
static const std::map<MyEnum, SomeInfo> fooMap
{
{MyEnum::Enum1, SomeInfo{ "info1", "Info 1" }},
{MyEnum::Enum2, SomeInfo{ "info2", "Info 2" }},
}
return fooMap;
}
}
struct SomeInfo
{
std::string id;
std::string name;
}
这种方法可能非常频繁,在我看来这看起来不是很有效,因为每次创建一个新的地图实例然后返回它。我尝试创建一个静态 const std::map 并以下列方式对其进行初始化:
class Foo()
{
public:
static const std::map<MyEnum, SomeInfo> fooMap
{
{MyEnum::Enum1, SomeInfo{ "info1", "Info 1" }},
{MyEnum::Enum2, SomeInfo{ "info2", "Info 2" }},
}
}
但这会返回以下错误:'const std::map
我真的不知道该怎么做,经过一些研究我没有发现任何真正有用的东西..
有什么猜测吗?
提前感谢大家!
【问题讨论】:
-
对所示代码的仔细阅读没有发现私有构造函数的实例,因此不清楚这究竟是要完成什么。您能否准确阐明“静态类”的含义,以及它与常规的普通类有何不同?这与显示的代码有何关系?这个问题不清楚。
-
Java 的静态类的 C++ 等价物是
namespace。 -
忘记在公共成员下添加一个“private: Foo() {}”,这可以防止调用构造函数