我可以在课外打字吗?

时间:2014-12-08 06:40:06

标签: c++ typedef

我使用的JsonCPP 0.6.0并不支持BOOST_FOREACH。 Robert A.已经patch使用BOOST_FOREACH。这是差异。

Index: value.h
===================================================================
--- value.h (revision 54283)
+++ value.h (working copy)
@@ -919,6 +919,7 @@
    class ValueIteratorBase
    {
    public:
+     typedef std::bidirectional_iterator_tag iterator_category;
       typedef unsigned int size_t;
       typedef int difference_type;
       typedef ValueIteratorBase SelfType;
@@ -990,6 +991,7 @@
    {
       friend class Value;
    public:
+      typedef const Value value_type;
       typedef unsigned int size_t;
       typedef int difference_type;
       typedef const Value &reference;
@@ -1048,6 +1050,7 @@
    {
       friend class Value;
    public:
+      typedef Value value_type;
       typedef unsigned int size_t;
       typedef int difference_type;
       typedef Value &reference;

所以我需要在json/include/value.h中添加3行,但我不想编辑原始的头文件,但想在我自己的源代码中添加3行。像这样的东西:

typedef std::bidirectional_iterator_tag Json::ValueIteratorBase::iterator_category;

当然我收到了错误error: typedef name may not be a nested-name-specifier。 我可以这样做吗?

PS。 JsonCPP 0.7.0支持BOOST_FOREACH。但就我而言,我现在无法升级JsonCPP。

1 个答案:

答案 0 :(得分:1)

命名空间已打开,但类定义已关闭。一旦遇到类定义末尾的闭括号,该类就完成了,您无法向该类添加额外的定义(例如额外的typedef)。相比之下,您可以在第一次关闭命名空间后向命名空间添加额外信息。

如果您无法升级到JsonCPP 0.7.0,则必须修补0.6.0标头或等待使用Boost功能,直到您可以升级到支持它的版本。