【发布时间】:2011-01-11 10:31:18
【问题描述】:
如果我编码这个
std::map<int, char> example = {
(1, 'a'),
(2, 'b'),
(3, 'c')
};
然后g++对我说
deducing from brace-enclosed initializer list requires #include <initializer_list>
in C++98 ‘example’ must be initialized by constructor, not by ‘{...}’
这让我有点恼火,因为构造函数是运行时的,理论上可能会失败。
当然,如果确实如此,它会很快失败,并且应该始终如一地这样做,因此我应该快速定位并纠正问题。
但是,我仍然很好奇 - 是否有在编译时初始化地图、矢量等?
编辑:我应该说我正在为嵌入式系统开发。并非所有处理器都有 C++0x 编译器。最受欢迎的可能会,但我不想遇到问题并且必须维护 2 个版本的代码。
至于 Boost,我还没有决定。他们对在嵌入式系统中使用他们的有限状态机类持怀疑态度,所以这实际上是我在这里编码的,事件/状态/Fsm 类。
唉,我想我最好还是谨慎行事,但我希望这次讨论对其他人有所帮助。
【问题讨论】:
-
查看 state-machine.com 以获取嵌入式 SM 库。
-
谢谢,我知道(但仍然 +1,因为它可能会帮助其他人)。这对我来说似乎有点太多了,但我确实也需要 o/s 抽象,所以......也许......也许这只是 Not-Invented-Here 综合症 ;-)
-
这里是answer to a similar stack overflow question,它巧妙地使用了模板类和运算符重载。
-
哇,gcc 确实处理了他们的错误消息。
-
在 c++11 (clang) 中,上述语法出现错误,用大括号替换括号已修复。