NSFX手册的学习(3)

写一个组件

现在,我们要做出一个具有IEcho接口的Echo组件。

// echo.h
#include "config.h"
#include "i-echo.h"

class Echo :
    public IEcho
{
public:
    Echo(void);
    virtual ~Echo(void);

    // IEcho
    virtual std::string Shout(const std::string& msg) NSFX_OVERRIDE;

private:
    // The interface map.
    NSFX_INTERFACE_MAP_BEGIN(Echo)
        NSFX_INTERFACE_ENTRY(IEcho)
    NSFX_INTERFACE_MAP_END()
};
这个例子显示了书写一个组件的基本结构。组件能自发的使用IEcho这个接口。
每一个组件一定要拥有一个接口地图。接口地图是从NSFX_INERFACE_MAP_BEGIN()这个宏定义开始,由NSFX_INTERFACE_MAP_END宏定义结束。
NSFX_INERFACE_MAP_BEGIN()的声明的是组件类的类型。通过定义接口地图,IObject接口就被默认设置了。
用户通过使用NSFX_INTERFACE_ENTY()来应用组件接入的接口。这个宏声明的就是接口的类型。因此,在上述例子里,组件Echo也接入了IEcho。
通过宏NSFX_REGISTER_CLASS(),组件就被注册了。如下:
NSFX_REGISTER_CLASS(Echo, "edu.uestc.nsfx.tutorial.Echo");
第一个宏的声明是组件类的类型,第二个声明的是组件的ID,也被称为类ID,CID,CID也是一个字符串。对于组件而言,推荐使用具有级别层次结构的CID。
该组件的运行可以被写入一个源文件中:
// echo.cpp
#include "config.h"
#include "echo.h"

Echo::Echo(void)
{
}

Echo::~Echo(void)
{
}

std::string Echo::Shout(const std::string& msg)
{
    return msg;
}
Shout()会返回输入的信息。
注意,因为组件没有应用IObject接口的虚函数,组件的类是抽象的。NSFX有很多类的模板,它提供了对IObject接口不同需求的应用。一个组件应该关注于将所提供接口的虚函数以具体的任务应用起来。


学习文件:https://github.com/Fuzzier/nsfx/blob/tutorials/tutorials.md

猜你喜欢

转载自www.cnblogs.com/lx61/p/12186400.html
今日推荐