Strong Type generic Composite class

M

ManicQin

Hi,
I tried to code a -> Strong typed generic composite class ...
i want to generalize the <function call> and the <interface> that the
compositor will implement
I tried writing it in many variations but none was suffice, or
working.
Any idea what should I look for?

Maybe a pseudo code will help explain:

//Pseudo code

template <class T , Function FunctinName>
class IComposite
{
void addnewItem(T* newItem) { m_list.push_back(newItem); } //
This line problematic too
void IterateThrough()
{
for (m_list::iterator iDx = m_list.begin;iDx != m_list.end(); iDx++)
{
(*iDx)->FunctionName(); //This line is the
main problem
}
}
vector<T*> m_list;
}

class ICommand
{
virtual void work() = 0;
};

class worker : public ICommand
{
void work(){ cout << "BLA" << endl; }
};
class CommandComposite : public ICommand , public IComposite
<ICommand*,ICommand::*work>
{
void work()
{
IterateThrough();
}
};


Thanks
 
K

Kai-Uwe Bux

ManicQin said:
Hi,
I tried to code a -> Strong typed generic composite class ...
i want to generalize the <function call> and the <interface> that the
compositor will implement
I tried writing it in many variations but none was suffice, or
working.
Any idea what should I look for?

I don't even have an idea what you are trying to accomplish.

Maybe a pseudo code will help explain:

//Pseudo code

template <class T , Function FunctinName>
class IComposite
{
void addnewItem(T* newItem) { m_list.push_back(newItem); } //
This line problematic too
void IterateThrough()
{
for (m_list::iterator iDx = m_list.begin;iDx != m_list.end(); iDx++)
{
(*iDx)->FunctionName(); //This line is the
main problem

And what is the problem?
}
}
vector<T*> m_list;
}

The above amounts to nothing more than calling a certain member function on
all items in a list of T*. If have no idea why you would call that a
composition class.
class ICommand
{
virtual void work() = 0;
};

class worker : public ICommand
{
void work(){ cout << "BLA" << endl; }
};
class CommandComposite : public ICommand , public IComposite
<ICommand*,ICommand::*work>
{
void work()
{
IterateThrough();
}
};


Nope. Pseudocode did not help either.

Maybe, if you would show a use case, some piece of possible client code
together with an explanation of the resulting behavior, it might become
more clear what you are after.



Best

Kai-Uwe Bux
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,185
Members
46,737
Latest member
Georgeengab

Latest Threads

Top