5

我有这样的:

用户.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++语言

4

1 回答 1

1

好的,我想我想出了如何编写getGroupsand的实现getUsers

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实现。

于 2012-08-09T11:29:35.343 回答