• Steven Murray's avatar
    Added inheritance between ZmqSocket , ZmqSocketST and ZmqSocketMT · b6edd0c0
    Steven Murray authored
    In a previous commit I removed the inheritance relationship between
    ZmqSocket and ZmqSocketMT.  I used templated functions in order to
    be able to handle instances of ZmqSocket and ZmqSocketMT with thei
    same code.  I now believe that decision was wrong in the long run.
    Future code maintainers will not know that a ZmqSocketMT object is
    a type of ZmqSocket.  Eclipse and doxygen are very good at
    providing class hierarchies.  One should benefit from this when one
    can as it is a form of free documentation.
    My previous commit not only removed inheritance, it also allowed
    the multi-threaded version of ZMQSocket to contain the single
    threaded version as opposed to inherit from it.  Using composition
    over inheritance prevented future mistakes where somebody adds a
    new thread-unsafe method to the super class and forgets or doesn’t
    know that they should implement a thread-safe overriding version in
    the sub-class.  This commit preserves composition over inheritance.
    There are now three “ZmqSocket” classes: ZmqSocket, ZmqSocketST and
    ZmqSocketMT.  ZmqSocket itself is now abstract and simply defines
    the methods such a socket should implement.  ZmqSocketST is ai
    concrete class for single-threaded use (hence ST) and
    ZmqSocketMT is for multithreaded use (hence MT).
    ZmqSocketST inherits from ZmqSocket and  ZmqSocketMT also inherits
    from ZmqSocket.  ZmqSocketMT does not inherit from ZmqSocketST.
    ZmqSocketMT contains an instance of ZmqSocketST therefore preserving
    the composition over inheritance solution of the previous commit.