如何在 CORBA 中获取和设置类字段?(处理 CORBA 对象的序列)



我是这样的:

User.idl:

#ifndef __USER_IDL__
#define __USER_IDL__
interface Group;
interface User
{
    typedef sequence<Group> Groups;
    Groups getGroups();
    void setGroups(in Groups g);
};
#endif

UserImpl.h 和 UserImpl.cpp:

class UserImpl : public POA_User
{
    private :
        User::Groups groups;
    public :
        User::Groups* getGroups();
        void setGroups(const ::User::Groups& g);
};
#endif
#include "UserImpl.h"
User::Groups* UserImpl::getGroups()
{
    return &(this->groups);
}
void UserImpl::setGroups(const ::User::Groups& g)
{
    this->groups.length(g.length());
    for(int i=0; i<g.length(); i++)
    {
        this->groups[i] = this->groups[i];
    }
}

和组.idl:

#ifndef __GROUP_IDL__
#define __GROUP_IDL__
#include "User.idl"
interface Group
{
    typedef sequence<User> Users;
    User getFounder();
    void setFounder(in User u);
    Users getUsers();
    void setUsers(in Users u);
};
#endif

GroupImpl.h, GroupImpl.cpp:

class UserImpl;
class GroupImpl : public POA_Group
{
    private :
        UserImpl *founder;
        Group::Users members;            
    public :
        User_ptr getFounder();
        void setFounder(::User_ptr u);
        Group::Users* getUsers();
        void setUsers(const ::Group::Users& u);
};
User_ptr GroupImpl::getFounder()
{
    return this->founder->_this();
}
void GroupImpl::setFounder(::User_ptr u)
{
}
Group::Users* GroupImpl::getUsers()
{
}
void GroupImpl::setUsers(const ::Group::Users& u)
{
}

在这里得到的问题是:我做对了吗?我的意思是,这段代码一切正常吗?我仍然学习如何用 CORBA 编写,有时会有疑问,尤其是在涉及序列时......

第二个问题:如何正确设置组的创始人,获取和设置组的成员?

我的意思是,我想在我的主文件中做这样的事情:

 #include "UserImpl.h"
#include "GroupImpl.h"
#include <omniORB4/CORBA.h>
#include <omniORB4/Naming.hh>
#include <iostream>
using std::cout;
using std::cerr;
int main(int argc, char **argv)
{
    UserImpl u;
    u.setLogin("yak");
    u.setID(123);
    cout << u.getLogin() << "n";
    cout << u.getID() << "n";
    cout << u.toString() << "n";

    GroupImpl **g = new GroupImpl*[1];
    for(int i=0; i<1; i++)
    {
        g[i] = new GroupImpl();
    }
    u.setGroups(g);
    return 0;
}

请帮忙:)我使用omniORB和C++语言

好的,

我想我想出了如何编写getGroupsgetUsers的实现:

User::Groups* UserImpl::getGroups()
{
    const size_t size = this->groups.size();
    User::Groups_var seqOfObjects = new User::Groups(size);
    seqOfObjects->length(size);
    size_t i = 0;
    vector<GroupImpl*>::const_iterator it = groups.begin();
    while (it != groups.end())
    {
        seqOfObjects[i] = Group::_duplicate((*it)->_this());
        ++it;
        ++i;
    }
   return seqOfObjects._retn();
}

是吗?但是我在setUserssetGroups实现方面仍然存在问题。

相关内容

  • 没有找到相关文章

最新更新