Я создаю сберегательного клиента, у которого много накладных расходов: TSocket
, TBufferedTransport
и TBinaryProtocol
. Обычно он создается так
Пример сберегательного клиента
int main(int argc, char **argv) {
shared_ptr<TTransport> mysocket(new TSocket("localhost", 9090));
shared_ptr<TTransport> mytransport(new TBufferedTransport(mysocket));
shared_ptr<TProtocol> myprotocol(new TBinaryProtocol(mytransport));
TestServiceClient client(myprotocol);
try {
mytransport->open();
client.testmethod(); //and you can call server methods like so
mytransport->close();
}catch (TException &tx) {
printf("ERROR: %s\n", tx.what());
}
}
Однако для моего клиента я хочу, чтобы он был в виде статической библиотеки. Таким образом, нет основного метода, и я создал методы init()
и exit()
для открытия и закрытия mytransport
. Это также означало, что мне нужно было сделать mysocket
, mytransport
, myprotocol
и client
все глобальные переменные, но я также хочу установить mysocket
на IP, отличный от localhost, что означает инициализацию mysocket
внутри метода. Любые идеи?
PS. Кроме того, кто-нибудь знает, как я могу вызывать init()
и exit()
автоматически, когда статическая библиотека открывается и закрывается? [Решено]
edit: я забыл упомянуть, что я не могу инициализировать mysocket
, пока не узнаю правильный ip, поэтому я не думаю, что могу объявить mysocket как глобальную переменную в любом случае
Socket& get(){ static Socket mysocket = initstuff(); return mysocket; }
. При первом вызове функции создается и возвращаетсяmysocket
. При дальнейших вызовах он просто возвращается. - person Suedocode   schedule 17.07.2013