【问题标题】:How to model noncopyable in Rational Rhapsody 8.0.1如何在 Rational Rhapsody 8.0.1 中建模不可复制
【发布时间】:2016-11-18 09:14:00
【问题描述】:

我想让我的 Rhapsody 模型中的一个类不可复制,但是

  • 没有可用的 boost 库(我只是从中派生)
  • 我也不能使用 C++11 方式禁用默认生成的复制 ctor 和复制分配操作(因为我需要操作函数签名,而 AFAIK 无法直接实现)

=> 所以我正在以古老的方式来做这件事。

我对 Rhapsody 的需求:

在这种情况下,我只想为 copy ctor 和 copy assignment op 生成一个声明——我不需要实现。 这甚至可能吗?

我考虑过的事情:

  • 我还没有找到任何有用的属性。
  • 仅将成员函数的规范映射到文件对象不会阻止 Rhapsody 将空函数体生成到隐式创建的文件对象(我不需要也不需要)。

【问题讨论】:

  • 我实际上找到了一种只生成规范代码的方法(这是我想要的:-)):属性 CG::Operation::Generate 必须设置为“规范”。默认情况下,它将设置为“Full

标签: c++ rhapsody


【解决方案1】:

我会建议一种刻板印象的方法:

  1. 创建一个NonCopyable 基类,例如@Dennis 所描述的。
  2. 创建一个原型,例如,您可以将其命名为<<non-copyable>>

    a) 将构造型属性CPP_CG::Class::AdditionalBaseClasses 设置为NonCopyable(上面创建的基类的名称)。

    b) 使构造型适用于类。

  3. 最后,将<<non-copyable>> 构造型添加到所有不可复制的类中。

【讨论】:

  • 我将在下周尝试这个,因为我相信这可能是关于 Rhapsody 的最干净的解决方案。我正在等待将这个答案标记为正确答案的时间更长一些 - 我想为其他建议留出一点空间(以防有人知道一种方法来生成函数的规范,而不是实现)
  • 这基本上是可行的,但是当你使用 nonCopyable-stereotype 时,继承关系是隐含私有的,因为没有指定继承类型(public、private、protected)跨度>
【解决方案2】:

写一个私有的拷贝ctor和opertor:

class NonCopy {
    // These private versions of the copy constructor 
    // and operator will signal to the compiler to 
    // prevent automatic generation.
    NonCopy(const NonCopy& other);
    const NonCopy& operator=(const NonCopy& other);
public:
    // Your public ctors
    NonCopy(int a);
}

您可以查看boost version of the non-copyable interface 以获得更完整的示例。

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • 虽然这可能是解决问题的宝贵提示,但一个好的答案也可以证明解决方案。请edit 提供示例代码来说明您的意思。或者,考虑将其写为评论。
  • @Garf365 - 我已经按照 Toby 的建议编辑了更多上下文,但您暗示我没有回答这个问题。根据我的阅读,他想要一门不可复制的课程。也许我错过了什么?
  • 好的,明确一点:我知道如何实现不可复制本身。但是,我确实希望不必编写空函数体。此外,上面示例中的 operator= 可能无法编译,因为没有返回任何内容。我的愿望是能够生成这行代码:const NonCopy& operator=(const NonCopy& other);
  • 只写一次,然后继承。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多