Şu an için boost/asio ile kodlamayı öğreniyorum. Birçok kod örneği async_accept ve bind kombinasyonunu kullanır. Sunucu kodunda, ben böyle bazı şey rastlamak:Aynı sınıfta tanımlanan bu iki işlev, ileri bildirim olmadan birbirlerini aramak için nasıl yönetilir?
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);
}
}
};
i Tcp_server bir örneğini yapmak ve handle_accept ya arayın veya kabul başlarsak, işe yarıyor. Ama eğer Tcp_server sınıfı kapsülleme işlemini bırakırsam, derleyici "handle_accept bildirilmiyor" diye şikayet ederdi. Derleyicinin otomatik olarak ileriye doğru aynı sınıfta tanımlanan tüm işlevleri bildirip bildirmediğini merak ediyorum. Nedenini açıklayan var mı?
Ama bu tasarım kararının (muhtemelen) neden yapıldığının nedeni bu değil midir? Bilmeyi çok merak ediyorum, BTW. – Drop
sadece @Drop'un dediği gibi, bunun ardındaki mantık nedir? – spiritsaway
@Drop Bu kararın sebebi, beyanların tanımlarla birleştirildiği durumlarda standardın bir ileri bildirim gerektirmesi gerektiğindeyse, sınıf içerisindeki tanımlayıcı fonksiyonların, özelliği tamamen kullanamayacağı noktaya göre, daha az uygun hale gelmesidir. . – dasblinkenlight