Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
it compiles!
authorgiersch <giersch>
Tue, 2 Oct 2007 13:57:40 +0000 (13:57 +0000)
committergiersch <giersch>
Tue, 2 Oct 2007 13:57:40 +0000 (13:57 +0000)
DrawingThreadCore.cpp
DrawingThreadCore.h
MainDrawingThread.cpp
MainDrawingThread.h
test/hello.cpp

index a1b4662..a55885f 100644 (file)
@@ -1,28 +1,7 @@
 #include <DrawingThreadCore.h>
 
-DrawingThreadCore::DrawingThreadCore(int argc_, char **argv_)
-    : QThread()
-    , argc(argc_)
-    , argv(argv_)
-{
-}
-
-DrawingThreadCore::~DrawingThreadCore()
-{
-}
-
 void DrawingThreadCore::run()
 {
-    exit(this->runForReal(argc, argv));
-}
-
-int DrawingThreadCore::runForReal()
-{
-    throw MissingImplementationException();
-}
-
-int DrawingThreadCore::runForReal(int /* argc */, char ** /* argv_ */)
-{
-    return this->runForReal();
+    exit(this->runForReal());
 }
 
index 95ccc62..e295db4 100644 (file)
@@ -5,19 +5,9 @@
 
 class DrawingThreadCore: public QThread {
 private:
-    int argc;
-    char **argv;
+    virtual int runForReal() = 0;
 
 public:
-    class MissingImplementationException { };
-
-protected:
-    virtual int runForReal();
-    virtual int runForReal(int argc, char **argv);
-
-public:
-    DrawingThreadCore(int argc, char **argv);
-    virtual ~DrawingThreadCore();
     void run();
 
 };
index 0f96cda..a786f9d 100644 (file)
@@ -2,13 +2,16 @@
 
 #include <QApplication>
 
-MainDrawingThread::MainDrawingThread(int argc, char **argv)
-    : DrawingThreadCore(argc, argv)
+MainDrawingThread::MainDrawingThread(int argc_, char **argv_)
+    : DrawingThreadCore()
+    , argc(argc_)
+    , argv(argv_)
 {
 }
 
-MainDrawingThread::~MainDrawingThread()
+int MainDrawingThread::runForReal()
 {
+    return MainDrawingThread::main(argc, argv);
 }
 
 int main(int argc, char *argv[])
index 88d22b2..fea59b3 100644 (file)
@@ -4,14 +4,35 @@
 #include <DrawingThreadCore.h>
 
 class MainDrawingThread: public DrawingThreadCore {
-public:
-    MainDrawingThread(int argc, char **argv);
-    ~MainDrawingThread();
+private:
+    int argc;
+    char **argv;
+
+    template<int (*f)()>
+    static int mainWrapper(int, char **)
+    {
+        return f();
+    }
+
+    template<int (*f)(int, char **)>
+    static int mainWrapper(int argc, char **argv)
+    {
+        return f(argc, argv);
+    }
+
+    static int (*main)(int, char **);
 
     int runForReal();
-    int runForReal(int argc, char **argv);
+
+public:
+    MainDrawingThread(int argc_, char **argv_);
+        
 };
 
-#define main_thread MainDrawingThread::runForReal
+#define main_thread(...)                                \
+    /* int */ main_thread(__VA_ARGS__);                 \
+    int (*MainDrawingThread::main)(int, char **) =      \
+        MainDrawingThread::mainWrapper<main_thread>;    \
+    int main_thread(__VA_ARGS__)
 
 #endif // !MAIN_DRAWING_THREAD_H
index a388e00..f7e0b2f 100644 (file)
 #include <DrawingArea.h>
 #include <MainDrawingThread.h>
 
-int main_thread(int, char **)
+#include <iostream>
+
+int main_thread(int argc, char **argv)
 {
     // >>> insert main drawing code here <<<
+    std::cout << "[" << argc << "]\n";
+    for (int i = 0; i < argc; i++)
+        std::cout << "  <" << argv[i] << ">\n";
+    while (true) {
+        sleep(1);
+        std::cout << '.' << std::flush;
+    }
+
     return 0;
 }