Re: Throwing constructor for wrong type of objects
Vladimir Jovic wrote:
Victor Bazarov wrote:
This example really demonstrates a problem I am facing.
Which is what?
So, is there a way to create such a constructor that is going a take
a reference to a specific base type, and to throw for all other types?
You made three examples, all of different classes. Some have a
templated c-tor, others don't... Do you expect us to read your mind?
If you want help, write down (and post) the requirements. Don't make
use guess. Please.
I thought an example would be better ;)
I have a bunch of template base classes representing buffers (to hold
data), which are really arrays with different data types (unsigned int,
unsigned short, unsigned char). There are few derived classes which do
something, but the base classes just provide a pointer to it's internal
data array. Total number of base classes is 6, but can be extended.
So, they are all different, yes? Or do they have a common base class?
Then I have bunch of classes representing filters. Each filter class
take a reference to input and output buffers, and use them to read input
data, and to write processed data. Input and output buffers can have
different data types.
Now, I want to connect these filters into a pipeline. I thought to
create buffers, then to create filters.
You create the filters using their c-tors? Or is there some kind of
factory mechanism?
Some filters support only one data type (for example 8-bit input, 16-bit
output), and I want to throw an exception if someone tries to pass any
other combination to this filter (for example, 32-bit input/8-bit output).
So, are there filters that support more than one pair of types? Are
they created using pairs or do you define input and output separately?
Maybe my design is broken in the first place. Please say if you think
there is a better way.
Let's imagine you have a bunch of type conversion classes. Let's say
that every class converts from type1 to type2. And let's say that
type1!=type2. So we can come up with
template<typename t1, typename t2> class converter;
Now, what's going to be its interface? What is it supposed to do?
First off, if you're going to place them in some kind of container
(queue, list, whatever), they gotta be homogeneous, yes? So, they most
likely have the same base class.
Second, if the container (queue, list) is going to act in some way to
process itself, then it's going to call some kind of 'process' method,
yes? Now, I don't want to redesign all of it for you, but it does seem
like a Pandora's box (a can of worms). How are the data defined? They
need to be unified in some way for the list to process its contents in a
generic way, yes? And so forth.
The sky is the limit on the design, AFAICT. What are the [6] types of
the buffers the filters need to deal with? What is the interface you
think you need for the filters? If you have figured it out, but are
stuck on the implementation phase, let's see those interfaces
(declarations only, if you don't have anything beyond that).
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask