File examples.diff of Package libsigc++12
--- examples/hello_world.cc
+++ examples/hello_world.cc
@@ -4,19 +4,19 @@
#include <string>
#include <sigc++/sigc++.h>
-#ifdef SIGC_CXX_NAMESPACES
-using namespace std;
-using namespace SigC;
+#ifndef SIGC_CXX_NAMESPACES
+# define SigC::
+# define std::
#endif
-void print(const string &str)
- {cout << str;}
+void print(const std::string &str)
+ {std::cout << str;}
-main()
- {
- Signal1<void,const string &> printer;
+int main(int, char**)
+{
+ SigC::Signal1<void,const std::string &> printer;
- printer.connect(slot(print));
+ printer.connect(slot(print));
- printer("hello world\n");
- }
+ printer("hello world\n");
+}
--- examples/signals.cc
+++ examples/signals.cc
@@ -10,81 +10,106 @@
// (2) If your compiler supports name spaces, you should use namespace SigC
// It is not necessary to include the entire space. However, if you
// include all you should do so in each source file.
-#ifdef SIGC_CXX_NAMESPACES
-using namespace std;
-using namespace SigC;
+#ifndef SIGC_CXX_NAMESPACES
+# define std::
+# define SigC::
#endif
// Some procedures to connect to.
-int foo1(int i) {cout<<"f("<<i<<");"<<endl; return 1;}
-int foo2(int i) {cout<<"sig2::f("<<i<<");"<<endl; return 1;}
-void foo1v(int i) {cout<<"fv("<<i<<");"<<endl;}
-void foo2v(int i) {cout<<"sig2::fv("<<i<<");"<<endl;}
+int foo1(int i)
+{ std::cout<<"f("<<i<<");"<<std::endl;
+ return 1;
+}
+
+int foo2(int i)
+{
+ std::cout<<"sig2::f("<<i<<");"<<std::endl;
+ return 1;
+}
+
+void foo1v(int i)
+{
+ std::cout<<"fv("<<i<<");"<<std::endl;
+}
+
+void foo2v(int i)
+{
+ std::cout<<"sig2::fv("<<i<<");"<<std::endl;
+}
// (3) Objects which are to be connected must be derived from SigC::Object.
-struct A:public Object
- {
- int foo(int i) {cout<<"A::f("<<i<<");"<<endl; return 1;}
- void foov(int i) {cout<<"A::fv("<<i<<");"<<endl;}
- A() {}
- };
-
-
-main()
- {
- A a;
-
- // (4) Signals can be declared anywhere, including as class members
- // Their size is about that of 2 pointers.
- // Signals contain their callback signature as template parameters.
- // The number following it is the number of parameters, and the
- // first argument is the return type.
- //
- // So to declare a signal called like int foo(int) would be
- // Signal1< int, int> foo;
+struct A:public SigC::Object
+{
+ int foo(int i)
+ {
+ std::cout<<"A::f("<<i<<");"<<std::endl;
+ return 1;
+ }
+
+ void foov(int i)
+ {
+ std::cout<<"A::fv("<<i<<");"<<std::endl;
+ }
+
+ A() {}
+};
+
+
+int main(int, char **)
+{
+ A a;
+
+ // (4) Signals can be declared anywhere, including as class members
+ // Their size is about that of 2 pointers.
+ // Signals contain their callback signature as template parameters.
+ // The number following it is the number of parameters, and the
+ // first argument is the return type.
+ //
+ // So to declare a signal called like int foo(int) would be
+ // Signal1< int, int> foo;
- // Lets declare a few signals.
- Signal1<int,int> sig1; // int sig1(int);
- Signal1<int,int> sig2; // int sig2(int);
-
- // The return type is allowed to be void.
- Signal1<void,int> sig1v; // void sig(int);
- Signal1<void,int> sig2v; // void sig2(int);
-
- // (5) After the signals are declared you can establish
- // connections between them and functions and methods.
- cout << ">> Connect to signals "<< endl;
-
- // Connect to function foo.
- sig1.connect(slot(foo1));
-
- // Connect to method foo of object a.
- sig1.connect(slot(a,&A::foo));
-
- // Connect to signal 1 to signal 2. Thus all things in signal2
- // are also called.
- sig1.connect(sig2.slot());
-
- // We can do the same for the void signals.
- sig1v.connect(slot(foo1v));
- sig1v.connect(slot(a,&A::foov));
- sig1v.connect(sig2v.slot());
-
- sig2.connect(slot(foo2));
- sig2v.connect(slot(foo2v));
-
- // (6) After connection the signals can be "emitted".
- // This calls all the callbacks stored within the signal.
- // (Emits are generally called reverse of the order connected,
- // however this is implementation specific.)
- cout << ">> Emit signals "<< endl;
-
- // Explicitly calling the emits.
- sig1.emit(1);
- sig1v.emit(2);
-
- // Or alternatively they can be called as a function object
- // with operator()
- sig1(1);
- sig1v(2);
- }
+ // Lets declare a few signals.
+ SigC::Signal1<int,int> sig1; // int sig1(int);
+ SigC::Signal1<int,int> sig2; // int sig2(int);
+
+ // The return type is allowed to be void.
+ SigC::Signal1<void,int> sig1v; // void sig(int);
+ SigC::Signal1<void,int> sig2v; // void sig2(int);
+
+ // (5) After the signals are declared you can establish
+ // connections between them and functions and methods.
+ std::cout << ">> Connect to signals "<< std::endl;
+
+ // Connect to function foo.
+ sig1.connect(SigC::slot(foo1));
+
+ // Connect to method foo of object a.
+ sig1.connect(SigC::slot(a,&A::foo));
+
+ // Connect to signal 1 to signal 2. Thus all things in signal2
+ // are also called.
+ sig1.connect(sig2.slot());
+
+ // We can do the same for the void signals.
+ sig1v.connect(SigC::slot(foo1v));
+ sig1v.connect(SigC::slot(a,&A::foov));
+ sig1v.connect(sig2v.slot());
+
+ sig2.connect(SigC::slot(foo2));
+ sig2v.connect(SigC::slot(foo2v));
+
+ // (6) After connection the signals can be "emitted".
+ // This calls all the callbacks stored within the signal.
+ // (Emits are generally called reverse of the order connected,
+ // however this is implementation specific.)
+ std::cout << ">> Emit signals "<< std::endl;
+
+ // Explicitly calling the emits.
+ sig1.emit(1);
+ sig1v.emit(2);
+
+ // Or alternatively they can be called as a function object
+ // with operator()
+ sig1(1);
+ sig1v(2);
+}