2016-11-18 50 views
0

我想使一個類在我的Rhapsody模型不可複製,但如何建模不可複製在Rational狂想曲8.0.1

  • 沒有可用的升壓庫(從我只想獲得)
  • 也不我可以使用禁用默認生成的拷貝構造函數的C++ 11方式和拷貝賦值運算(因爲我需要操縱函數簽名,這是AFAIK不能直接)

=>所以我正在做着古老的方式。

我從狂想曲需要什麼:

在這種情況下,我只想生成拷貝構造函數聲明,並拷貝賦值運算 - 我不需要實施。 這甚至可能嗎?我認爲

事情:

  • 我還沒有發現任何有用的財產呢。
  • 僅將成員函數的規範映射到文件對象不會阻止Rhapsody將空函數體生成爲隱式創建的文件對象(我不需要也不想)。
+0

我居然發現的唯一生成規範的代碼(這是我想要的東西:-))的方式: 屬性* CG ::操作::生成*已被設置爲「_Specification_」。默認情況下,它將被設置爲「_Full_」 –

回答

2

我建議一個原型的方法:

  1. 創建NonCopyable基類,如,例如,通過@Dennis說明。
  2. 創建刻板印象,例如,您可以將其命名爲<<non-copyable>>

    a)將原型屬性CPP_CG::Class::AdditionalBaseClasses設置爲NonCopyable(上面創建的基類的名稱)。

    b)使原型適用於類。

  3. 最後,將<<non-copyable>>原型添加到所有不可複製的類。

+0

我會在下週嘗試這個,因爲我相信這可能是Rhapsody方面最乾淨的解決方案。 我等了一會兒,把這個答案標記爲正確的一個更長一點 - 我想留下一點空間來提供其他建議(以防有人知道一種方法來生成只是規範,而不是函數的實現) –

+0

這基本上起作用,但是當你使用nonCopyable-stereotype時,繼承關係是隱含私有的,因爲沒有指定繼承類型(public,private,protected) –

0

寫私人拷貝構造函數和算子的:

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更完整的例子。

+1

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/14329808) – Garf365

+1

雖然這可能是一個有價值的提示來解決問題,但一個好的答案也可以證明解決方案。請[編輯]提供示例代碼來展示你的意思。或者,可以考慮將其寫爲註釋。 –

+0

@ Garf365 - 我已經編輯了Toby建議的更多上下文,但是您建議我不回答這個問題。從我的閱讀中,他想要一個不可複製的課程。也許我錯過了什麼? – Dennis