これは未熟な質問であることは承知していますが、モックアップのクライアント サーバー シーケンシャル インタラクション アプリケーションを実装する必要があります。クライアントとそれをサーバーに転送し、その逆も同様であるため、クラスとクラスが相互に認識できるようにしてServer
、Client
クラス間でパブリックメソッドを呼び出すことができるようにする必要があります。1 つのアプローチは、両方をシングルトンとして設計することですが、より単純な方法で、より正確には循環参照を使用することを望んでいました。クライアントはサーバーへの参照を格納し、サーバーはクライアントへの参照を格納します。これは良いアプローチではない可能性があることを認識しており、コールスタックが深くなりすぎると爆発する可能性があります、そのため、私のデザインの改善は大歓迎です。
説明されている実装を実現するために、2 つのセッターを呼び出したときに main の 2 つの変数が破壊されるのを防ぎたい場合にも機能しないstd::shared_ptr
ため、を使用できると思いました (右?)。std::unique_ptr
だから、これは私が持っているものです(簡略化されたコード):
#include <iostream>
#include <memory>
class Server;
class Client
{
public:
void SetServer (const Server &server);
private:
std::shared_ptr<const Server> server;
};
void Client::SetServer (const Server &server)
{
this->server = std::shared_ptr<const Server>(&server);
}
class Server
{
public:
void SetClient (const Client &client);
private:
std::shared_ptr<const Client> client;
};
void Server::SetClient (const Client &client)
{
this->client = std::shared_ptr<const Client>(&client);
}
int main ()
{
Server server;
Client client;
server.SetClient(client);
client.SetServer(server);
//Here I ask the client to start interacting with the server.
//The process will terminate once the client
//exhausts all the data it needs to send to the server for processing
return 0;
}
残念ながら、私のコードはクライアントとサーバーの (暗黙の) デストラクタを複数回呼び出すか、または同様の厄介なことを試みているようですstd::shared_ptr
。お知らせ下さい。