做过网络编程的人都知道sockaddr这个东西,其实最初的时候我也无法理解,为什么要强转指针又传递sizeof这个东西呢。
其实这是C的继承,unix和internet领域有不同的sockaddr形式,sockaddr是逻辑上的基类,通过不同的sizeof可以获得正确的类型信息然后转型。这真是太不好了。
如果你使用的代码中有这样良好的设计但是没有良好的代码形式,那你表现的时候到了,简单的一个C++继承可以漂亮的完成这个工作,这在方便自己使用的同时一定让原作者感动欣慰,他当时也想到了,而苦于没有合适的工具,而你有,不用自己设计就可以完成漂亮事情,这是一件多么美好的事情啊。
回想起我初学网络编程的时候的苦痛,我能理解将一维api转化为继承体系的重要性。
那个时候,为了记住各个api我付出了很大的记忆劳动,尽管最终有些api是不常用的,但是不记住的话在万一需要用的时候你一定会后悔的。现在看看c socket api那已大列函数依然觉得这是新手要跨越的一个大障碍,幸好ace早就考虑到了这个问题,ACE_SOCK、ACE_SOCK_Acceptor、ACE_INET_Addr的继承体系覆盖了这一切函数。有些共同的东西被包覆在了基类里,子类用来实现有区别的东西。
理解这个多维体系将比理解一维线性的那一堆方法容易一些。这对使用者也是一件好事。