libsigc++

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Libsigc++
Stable release
2.6.2[1][2] / November 13, 2015; 17 months ago (2015-11-13)
Preview release
2.99.7[1][2] / June 27, 2016; 10 months ago (2016-06-27)
Written in C++
Type library or framework
Website libsigc.sourceforge.net

Libsigc++ is a C++ library for typesafe callbacks.

'libsigc++' implements a callback system for use in abstract interfaces and general programming. Libsigc++ is one of the earliest implementations of the signals and slots concept implemented using C++ template metaprogramming. It was created as an alternative to the use of a meta compiler such as found in the signals and slots implementation in Qt. Libsigc++ originated as part of the gtkmm project in 1997 and later was rewritten to be a standalone library. Each signal has a particular function profile which designates the number of arguments and argument type associated with the callback. Functions and methods are then wrapped using template calls to produce function objects (functors) which can be bound to a signal. Each signal can be connected to multiple functors thus creating an observer pattern through which a message can be distributed to multiple anonymous listener objects. Reference counting based object lifespan tracking was used to disconnect the functors from signals as objects are deleted. The use of templates allowed for compile time typesafe verification of connections. The addition of this strict compile time checking required the addition of template typecasting adapters which convert the functor callback profile to match the required signal pattern.

Libsigc++ was a natural expansion of the C++ standard library functors to the tracking of objects necessary to implement the observer pattern. It inspired multiple C++ template based signal and slot implementations including the signal implementation used in the boost C++ libraries.

Libsigc++ is released as free software under the GNU Lesser General Public License (LGPL).

References[edit]

External links[edit]