ho sth come questo:Come ottenere e impostare un campo di classe in CORBA? (Si tratta di sequenze di oggetti 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 e 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];
}
}
E 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)
{
}
La domanda sono arrivato qui: l'ho fatto bene? Voglio dire, va tutto bene con questo codice? Imparo ancora come scrivere in CORBA ea volte ho dubbi soprattutto se si tratta di sequenze ...
La seconda domanda: come impostare correttamente il fondatore del gruppo e ottenere e impostare i membri del gruppo?
Voglio dire, mi piacerebbe fare qc come questo nel mio file principale:
#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;
}
prega, aiuto :) io uso omniORB e linguaggio C++
È necessario restringere il campo a una sola domanda. Mi spiace essere schietto, ma stai facendo un sacco di cose sbagliate qui. È necessario familiarizzare con la mappatura da IDL a C++. Suggerisco di ottenere il documento di mappatura da IDL a C++ dal sito Web OMG. Guarda anche il libro di Henning & Vinowski _Advanced CORBA Programming with C++ _. –
@Brian Neal: sì, ho letto questo libro ma non ho trovato nulla di familiare nella sequenza di oggetti. Sareste in grado di aiutare un po '? Intendo in questo libro c'è solo un'interfaccia IDL familiare (ha una sequenza di oggetti) ma non c'è implementazione di esempio. – yak
Yak, tutto quello che devi sapere è in quel libro. Descrive dettagliatamente la mappatura da IDL a C++ per sequenze con utilizzo sia lato server che lato client. C'è un intero capitolo con esempi. –