OmNET++动态检查NED模块是否实现了接口

OmNET++ dynamically check if NED module implements an interface

本文关键字:实现 接口 是否 模块 动态 检查 NED OmNET++      更新时间:2023-10-16

在 OmNET++ 模拟中,我需要根据传递给构造函数的字符串在C++中动态创建模块。解析字符串,然后像这样创建模块(已经作为 NED 文件存在):

cModuleType* mwType = cModuleType::get(mwName);
cModule* middleware = mwType->create(mwName, this);

但是,我只想创建实现某个moduleinterface的模块,该模块也在NED文件中定义,即我只想创建定义为simple MyModule like MyInterface {...}的模块并为所有其他模块抛出异常。有没有办法在 OmNET++ 中检查这种情况?

您可以使用以下方式检查简单模块类是否实现了名为MyInterface moduleinterface

cModuleType *mwType = cModuleType::get(mwName);
std::string desc = mwType->str();
const std::string interfaceName = "MyInterface";
if (desc.find(interfaceName) != std::string::npos) {
    EV << mwName << " implements " << interfaceName << endl;
    cModule* middleware = mwType->create(mwName, this);
    // ...
} else {
    EV << mwName << " does not implement " << interfaceName << endl;
}