|
Boost : |
From: dexsch (DavidS_at_[hidden])
Date: 2002-02-19 22:14:38
--- In boost_at_y..., "Noah Stein" <noah_at_v...> wrote:
> > -----Original Message-----
> > From: dexsch [mailto:DavidS_at_a...]
> > Sent: Tuesday, February 19, 2002 5:48 PM
>
> >
> > Here is an example of a meta type definition.
> >
> > // This says ListNode types must
> > // declare a typedef value_type,
> > // have a copy constructor,
> > // and a next() method which returns a ListNode*
> > // and an equality comparison operator
> > // Remember the name ListNode is a place holder
> > // for the actual type(s) being constrained
> > typespec ListNode
> > {
> > public:
> > typedef value_type;
> > ListNode(const ListNode&)
> > ListNode* next();
> > bool operator==(const ListNode&)
> > };
>
>
> I like the idea here, but I would prefer a notation that does not
introduce
> a keyword. I would suggest using a notation similar to that used
by pure
> virtual functions:
>
> typename ListNode = 0
> {
> public:
> typedef value_type;
> ListNode(const ListNode&);
> ListNode* next();
> bool operator==(const ListNode&);
> };
>
> The issues I still see with the above is that the "typedef
value_type;" is
> different than the normal syntax for typedef. Which leads me to
another
> suggestion. I think that there should be some type of ANY class
designation
> like that in Eiffel. It's a great way to specify a completely
abstract
> concept without resorting to using many template parameters and the
> curiously recurring template pattern.
>
> >
> > // This says the LinkedList template class
> > // accepts only types that satisfy the ListNode typespec
> > template <ListNode T>
> > class LinkedList
> > {
> > ...
> > };
> >
>
> I don't think the proposed notation would work as-is. What if the
> requirements on T are that it be a ListNode and, say,
Serializable? Maybe
> something such as:
>
> template< class<ListNode,Serializable> T>
> class LinkedList
> {
> ...
> };
I covered that situation in a follow up message #25597.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk