私はboost/asioでコードすることを学んでいます。多くのコードサンプルでは、async_acceptとbindの組み合わせが使用されています。サーバーのコードでは、私はこのようないくつかのことに遭遇:同じクラスに定義されたこれらの2つの関数は、順方向宣言なしに互いにどのように呼び出すことができますか?
class Tcp_server
{
public:
Tcp_server()
{
}
void start_accept(int a)
{
if(a>0)
{
cout<<a<<endl;
handle_accept(a-1);
}
}
void handle_accept(int a)
{
if(a>0)
{
cout<<a<<endl;
start_accept(a-1);
}
}
};
私はTcp_serverのインスタンスを作成し、handle_acceptのいずれかを呼び出すか、受け入れを開始した場合、それが動作します。しかし、私がTcp_serverクラスのカプセル化を落とすと、コンパイラは "handle_accept is not declared"と文句を言うでしょう。コンパイラが自動的に同じクラスに定義されているすべての関数を宣言しているかどうかは不思議です。なぜ誰かが説明できますか?
しかし、このデザインの決定が(おそらく)作られたのはなぜですか?私は知ることが非常に興味がある、BTW。 – Drop
ちょうど@Dropが言ったように、これの背後にある根拠は何ですか? – spiritsaway
@Dropこの決定の理由は、宣言が定義と組み合わされている場合に標準が前方宣言を要求していた場合、クラス内の関数の定義は、機能の使用を完全に止めることができる点。 – dasblinkenlight