C++ 域建模发行说明

© Copyright International Business Machines Corporation 2006. All rights reserved. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

发行说明

1.0 局限性
   1.1 模板特例化支持
   1.2 匿名 C++ 类型的字段和方法的编辑
   1.3 嵌套 C++ 类型的字段和方法的编辑
2.0 已知问题与变通方法
   2.1 具有限定名的类型定义
   2.2 使用代码更改和索引来刷新图

1.0 局限性

1.1 模板特例化支持

可以将常规 C++ 模板可视化并进行编辑。然而,由于 CDT 中缺少支持,所以模板特例化和部分特例化不受支持。当前 UI 不禁用完全特例化和部分特例化的可视化条目。它将不执行任何操作,例如:
template <class T> class MyVec {
 T* data;
 int length;
}; 

这是一个常规模板。此模板的可视化将会成功。

template <> class MyVec<bool> {
 unsigned int * data;
 int length;
}; 

这是一个特例化模板。此模板的可视化将会失败。

1.2 匿名 C++ 类型的字段和方法的编辑

不支持对匿名 C++ 类型的字段和方法进行编辑,例如:
class c1 {
   class {int j;} abc;    // The type of member abc is an anonymous type since defining class has not been given any typename
};

此处字段 abc 的类型是一个匿名类。

当前,在图上执行添加或删除字段、方法和枚举文字等编辑操作时,C++ 可视化无法处理匿名类型的更改变化量。因此,C++ 可视化编辑功能不可用于匿名类型。一般建议尽可能使用指定的类型,以便可以使用编辑功能。如果不能使用指定的类型,则应直接编辑代码。

1.3 嵌套 C++ 类型的字段和方法的编辑

不支持对匿名名称空间内嵌套的指定 C++ 类型的字段和方法进行编辑,例如:

namespace {   // anonymous namespace
    class c1 {};
}

此处类 c1 为匿名名称空间中嵌套的指定类型。

当前,在图上执行添加或删除字段、方法和枚举文字等编辑操作时,C++ 可视化无法处理匿名名称空间中嵌套的指定类型的更改。因此,C++ 可视化编辑功能不可用于匿名名称空间内嵌套的指定类型。一般建议尽可能使用指定的名称空间,以便可以使用编辑功能。如果不能使用指定的类型,则应直接编辑代码。

2.0 已知问题与变通方法

2.1 具有限定名的类型定义

C++ 可视化不支持具有限定名的类型定义,例如:

namespace n1 {
   class c1;    // Forward declaration of class c1
}
class n1::c1{ int i;};   //  Definition of class c1 using the fully qualified name.

C++ 可视化不能处理以上定义,并且类 c1 的可视化会失败。

变通方法:请使用以下代码,它是以上代码的等价代码:

namespace n1 {
 class c1{ int i;};
}

2.2 使用代码更改和索引来刷新图

有时,代码中的更改(包括重命名元素或在类型中添加/删除成员)可能不会反映在可视化图中。导致这种错误的最常见原因是来自 CDT 的更改通知不恰当或缺少通知。

变通方法:请对文件执行虚假更改并再次保存代码。另外,有时由 CDT 创建的“C/C++ 索引”可能与代码不一致。快速检查 C/C++ 索引(显示视图 > 其他 > C/C++ > C/C++ 索引)以查看是否缺少某些条目,这样可以得到索引更新发生问题的某些线索。在这种情况下,重建项目的索引可能会有帮助。然而,对于大项目,重建索引可能很耗时,应慎重使用。如果要在图中显示相关元素,请选择完整 C/C++ 索引器选项。