私の情報モデルには、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
を作成するが、それは動作し、本当に話題ではありません;))
ビットより多くの洞察力:私の情報モデルには、
- データ型オブジェクト
- インスタンス - そのタイプのオブジェクト。
デストラクタでは、そのタイプのインスタンスをすべて削除したい(リストにタグが付けられています)。このすべては特定のdatatype.cpp
ファイルで起こります。 DummyObject
は、インスタンスを削除するためにデストラクタを呼び出すために作成されただけです
ObjID
の情報を使ってスニペットにこの2行を生成する魔法がありますか?
auto dummyTypeInstance = new NamespacePrefix::AutomationDomainTypeBase(UaNodeId(NamespacePrefixId_AutomationDomainType, 2),
UaString("Dummy_AutomationDomainType"), 2, pNodeManagerRoot);
// ...
dummyTypeInstance->~AutomationDomainTypeBase();
コードを生成するためにスクリプトを使用したくない(時間がかかりすぎる)。
を持っているすべての組み合わせでテンプレート関数を使用していますか?特にoyuが次の行のインスタンスを削除する場合は... – anderas
良いニュース。自分で 'destructor'を呼び出す必要はありません。 'delete dummyTypeInstance;'を呼び出すと、フレームワークはそれをautomaticaly(あなたの変数が持つ型のデストラクタ)と呼ぶでしょう。変数にいくつかの共通の '基本型'がある場合、派生型で 'virtual distructor'を作成する必要があります(ちょうどすべてのデストラクタに' virtual' keywodを追加してください)。 –
私は正しいと思えば、UaModelerを使ってC++コードを生成しています。生成されたコードの詳細については、Unified Automationサポートにお問い合わせください。彼らの公開フォーラムは既にhttp://forum.unified-automation.com –