Für die Zeit lerne ich mit Boost/Asio Code zu programmieren. Viele Codebeispiele verwenden die Kombination aus async_accept und bind. Im Server-Code, ich über irgendeine Sache wie diese kommen:Wie schaffen es diese zwei Funktionen, die in derselben Klasse definiert sind, einander ohne Forward-Deklaration aufzurufen?
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);
}
}
};
Wenn ich eine Instanz von Tcp_server machen und entweder handle_accept rufen oder akzeptieren beginnen, es funktioniert. Aber wenn ich die Tcp_server-Klasse-Kapselung ablege, würde sich der Compiler beschweren "handle_accept ist nicht deklariert". Ich frage mich nur, ob der Compiler alle Funktionen, die in derselben Klasse definiert sind, automatisch weiterleitet. Kann mir jemand erklären warum?
Aber ist nicht die Frage, warum diese Designentscheidung (wahrscheinlich) gemacht wurde? Ich bin sehr neugierig darauf, BTW. – Drop
wie @Drop sagte, was ist der Grund dafür? – spiritsaway
@Drop Der Grund für diese Entscheidung ist, dass, wenn der Standard eine Forward-Deklaration in Fällen erfordern würde, in denen Deklarationen mit Definitionen kombiniert werden, das Definieren von Funktionen innerhalb der Klasse wesentlich unpraktischer würde, bis zu dem Punkt, an dem man das Feature vollständig verwenden könnte . – dasblinkenlight