gpt4 book ai didi

c++ - 如何初始化一个 std::map 一次,以便它可以被一个类的所有对象使用?

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:31 25 4
gpt4 key购买 nike

我有一个枚举 StackIndex 定义如下:

typedef enum 
{
DECK,
HAND,
CASCADE1,
...
NO_SUCH_STACK
} StackIndex;

我创建了一个名为 MoveSequence 的类,它是 std::deque 的包装器一组形式为 <StackIndex, StackIndex> 的元组.

class MoveSequence
{
public:
void AddMove( const tpl_move & move ){ _m_deque.push_back( move ); }
void Print();
protected:
deque<tpl_move> _m_deque;
};

我想我可以创建一个静态的 std::map MoveSequence的成员类,它将翻译 StackIndexstd::string , 供 Print() 使用功能。但是当我尝试时,我得到了错误:

"error C2864: 'MoveSequence::m' : only static const integral data members can be initialized within a class"

如果无法将 std::map 创建为静态成员,是否有另一种方法来创建转换 StackIndex 的 std::map到 std::string可用于打印 MoveSequence对象?

谢谢

蜜蜂乐队。

最佳答案

您需要将初始化移动到源文件中:

// header
struct foo
{
typedef std::map<unsigned, std::string> the_map;
static const the_map m;
};

// source
const foo::the_map foo::m(...);

无论你想如何初始化它。 C++0x 取消了这个限制。

牢记Boost.Assign使这很容易:

#include <boost/assign.hpp>
const foo::the_map foo::m = boost::assign::map_list_of(1, "a")(2, "b");

关于c++ - 如何初始化一个 std::map 一次,以便它可以被一个类的所有对象使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com