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

时间:2012-08-08 15:36:53

标签: c++ sequence corba omniorb

我是这样的:

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];
    }
}

和Group.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 ++语言

1 个答案:

答案 0 :(得分:1)

好的,我想我想出了如何编写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实施问题。