From aac6618f514234489b49d3baec9c33bbf86a20cc Mon Sep 17 00:00:00 2001 From: giersch Date: Tue, 2 Oct 2007 13:57:40 +0000 Subject: [PATCH 1/1] it compiles! --- DrawingThreadCore.cpp | 23 +---------------------- DrawingThreadCore.h | 12 +----------- MainDrawingThread.cpp | 9 ++++++--- MainDrawingThread.h | 31 ++++++++++++++++++++++++++----- test/hello.cpp | 12 +++++++++++- 5 files changed, 45 insertions(+), 42 deletions(-) diff --git a/DrawingThreadCore.cpp b/DrawingThreadCore.cpp index a1b4662..a55885f 100644 --- a/DrawingThreadCore.cpp +++ b/DrawingThreadCore.cpp @@ -1,28 +1,7 @@ #include -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()); } diff --git a/DrawingThreadCore.h b/DrawingThreadCore.h index 95ccc62..e295db4 100644 --- a/DrawingThreadCore.h +++ b/DrawingThreadCore.h @@ -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(); }; diff --git a/MainDrawingThread.cpp b/MainDrawingThread.cpp index 0f96cda..a786f9d 100644 --- a/MainDrawingThread.cpp +++ b/MainDrawingThread.cpp @@ -2,13 +2,16 @@ #include -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[]) diff --git a/MainDrawingThread.h b/MainDrawingThread.h index 88d22b2..fea59b3 100644 --- a/MainDrawingThread.h +++ b/MainDrawingThread.h @@ -4,14 +4,35 @@ #include class MainDrawingThread: public DrawingThreadCore { -public: - MainDrawingThread(int argc, char **argv); - ~MainDrawingThread(); +private: + int argc; + char **argv; + + template + static int mainWrapper(int, char **) + { + return f(); + } + + template + 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; \ + int main_thread(__VA_ARGS__) #endif // !MAIN_DRAWING_THREAD_H diff --git a/test/hello.cpp b/test/hello.cpp index a388e00..f7e0b2f 100644 --- a/test/hello.cpp +++ b/test/hello.cpp @@ -24,9 +24,19 @@ #include #include -int main_thread(int, char **) +#include + +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; } -- 2.20.1