Omnet++ 从omnet中的AdhocHost继承的新模块&x2B+;

Omnet++ 从omnet中的AdhocHost继承的新模块&x2B+;,omnet++,adhoc,inet,Omnet++,Adhoc,Inet,我需要一个从AdhocHost继承的新模块。朋友们之前问过,先生回答说: 在OMNeT++中,仅为简单模块定义行为。所以我们不能 为复合模块定义C++类。< /P> 但手册指出: 虽然复合模块的C++类可以被重写 @class属性,这是一个可能永远都不应该使用的特性 用过。将代码封装到一个简单的模块中,并将其添加为 子模块 如何创建此模块?从头开始创建cSimpleModule模块是不合逻辑的,因为我想使用预定义的AdhocHost参数、方法,。。。还有我的新定义。你说得对,在OMNeT++中,

我需要一个从
AdhocHost
继承的新模块。朋友们之前问过,先生回答说:

在OMNeT++中,仅为简单模块定义行为。所以我们不能 为复合模块定义C++类。< /P> 但手册指出:


虽然复合模块的C++类可以被重写 @class属性,这是一个可能永远都不应该使用的特性 用过。将代码封装到一个简单的模块中,并将其添加为 子模块


如何创建此模块?从头开始创建
cSimpleModule
模块是不合逻辑的,因为我想使用预定义的
AdhocHost
参数、方法,。。。还有我的新定义。

你说得对,在
OMNeT++
中,可以为复合模块定义一个类。你提到的我的回答不是100%正确。

要创建从
AdhocHost
继承并具有自己的类的新模块,至少应执行以下操作:

  • inet4\src\inet\node\inet
    中创建一个新文件
    adhochostended.ned

    package inet.node.inet;
    import inet.node.inet.AdhocHost;
    
    module AdhocHostExtended extends AdhocHost {
        @class(AdhocHostExtended);
        int par1;
        double par2;
    }
    
  • 在同一目录中创建
    adhochostended.h

    #ifndef __INET4_ADHOCHOSTEXTENDED_H_
    #define __INET4_ADHOCHOSTEXTENDED_H_
    
    #include <omnetpp.h>
    using namespace omnetpp;
    
    namespace inet {
    
    class AdhocHostExtended : public cModule  {
      protected:
        virtual int numInitStages() const override { return NUM_INIT_STAGES; }
        virtual void initialize(int stage) override;
        virtual void handleMessage(cMessage *msg);
    };
    
    } //namespace
    #endif
    

  • 注意在
    initialize()
    中使用适当的阶段。在>/NET4/SRC/IPEN/Ung/ItPiels. H.< /Cult>

    中定义了阶段,虽然对于复合模块的C++类可以用@类属性重写,但这是一个应该永远不会使用的特性。将代码封装到一个简单模块中,并将其作为子模块添加。在文件AdhocHostExtended.cc中,永远不会调用函数“void AdhocHostExtended::handleMessage(cMessage*msg)”。其他功能未经测试。

    #include "AdhocHostExtended.h"
    namespace inet {
    
    Define_Module(AdhocHostExtended);
    
    void AdhocHostExtended::initialize(int stage) {
      // an example of reading new parameter in the first stage
      if (stage == INITSTAGE_LOCAL) {
         EV << "par1 = " << par("par1").intValue() << endl;
      }
      // your code
    }
    
    void AdhocHostExtended::handleMessage(cMessage *msg) {
         // your code
    }      
    
    } //namespace