在我的信息模型中,有超過400個數據類型,它們的命名方式如下:AutomationDomainType
。類型(構造函數和成員)是從模型生成的,但不幸的是沒有生成析構函數。所以,我要實現自己的析構函數,並呼籲他們在我的主要功能:從字符串中動態生成類構造函數
void deleteObjectTypeUA(OpcUa_UInt16 ObjID, OpcUa_UInt16 NsIdx)
{
if (ObjID == PrefixId_AutomationDomainType)
{
NodeManagerRoot* pNodeManagerRoot = NodeManagerRoot::CreateRootNodeManager();
auto dummyTypeInstance = new NamespacePrefix::AutomationDomainTypeBase(UaNodeId(PrefixId_AutomationDomainType, 2),
UaString("Dummy_AutomationDomainType"), 2, pNodeManagerRoot);
dummyTypeInstance->~AutomationDomainTypeBase();
delete dummyTypeInstance;
}
我必須手動執行的數據類型的析構函數.cpp
S,但在我deleteType
功能我不想讓400 if else
條件創造DummyObject
,之後析構函數(我爲了調用類,得不到良好的執行的析構函數創建dummyobject
但它的工作原理,是不是真正的話題;))
有點更多見解:在我的信息模型中有
- a DataType-Object,和
- 實例 - 該類型的對象。
在析構函數中,我想刪除該類型的所有實例(它們在列表中被標記)。儘管如此,這一切都發生在特定的datatype.cpp
文件中。所述DummyObject
只爲了調用析構函數創建(刪除實例)
是有C++中的可能性具有一些特殊產生該2行與ObjID
的信息的片段?
auto dummyTypeInstance = new NamespacePrefix::AutomationDomainTypeBase(UaNodeId(NamespacePrefixId_AutomationDomainType, 2),
UaString("Dummy_AutomationDomainType"), 2, pNodeManagerRoot);
// ...
dummyTypeInstance->~AutomationDomainTypeBase();
我不想使用腳本來生成代碼(它會太長)。
爲什麼你必須顯式調用析構函數?特別是如果oyu刪除下一行中的實例... – anderas
好消息。你不必自己調用'析構函數'。當你調用'delete dummyTypeInstance;'時,框架會自動調用它(你的變量具有的類型的析構函數)。如果你的變量有一些常見的'base type',你必須在派生類型中創建'virtual distructor'(只需在每個析構函數中添加'virtual' keywod) –
如果我猜對了,你使用UaModeler來生成C++代碼。我建議聯繫統一自動化支持以獲取生成代碼的詳細信息。他們的公共論壇可以在http://forum.unified-automation.com –