Inherited constructors (templates)
Hello group,
I'm having a problem with inheritance and I've run out of ideas. I'm
trying to encpsulate threads in a nice(tm) way. Therefore I declared a
template class:
template <typename ArgumentType, typename ReturnType> class Thread
with a purely virtual method
virtual ReturnType Action() = 0;
of which my actual threads should inherit from:
class AddingThread : public Thread<int*, int> {
public:
int Action() {
int sum = 0;
for (unsigned int i = 0; i < 10; i++) {
sum += Data[i];
}
return sum;
}
};
Now I want to call that thing just like
int foo[10];
memset(foo, 0, sizeof(foo));
foo[5] = 9;
AddingThread t1(foo);
int result = t1.join();
The problem I get is:
threadtest.cpp: In function int main():
threadtest.cpp:23: error: no matching function for call to
AddingThread::AddingThread(int [10])
threadtest.cpp:6: note: candidates are: AddingThread::AddingThread()
threadtest.cpp:6: note: AddingThread::AddingThread(const
AddingThread&)
I can solve it, of course, by doing:
AddingThread(int *x) : Thread<int*, int>(x) { }
Where the "Thread" constructor does all the magic (i.e. actually
creating the thread and calling the trampoline to kick off "Action").
However, I do not want this redundant constructor delegation - is it
possible to tell the compiler to always use only the parent's
constructor of identical prototype if no child constructor is available?
Maybe I'm also thinking just in a very wrong way, maybe inheritance
isn't even the way to go here. Some other ideas maybe?
Kind regards,
Johannes
--
"Meine Gegenklage gegen dich lautet dann auf bewusste Verlogenheit,
verl?sterung von Gott, Bibel und mir und bewusster Blasphemie."
-- Prophet und Vision?r Hans Joss aka HJP in de.sci.physik
<48d8bf1d$0$7510$5402220f@news.sunrise.ch>