Boost logo

Boost :

From: Brian McNamara (lorgon_at_[hidden])
Date: 2003-09-01 01:44:57


On Mon, Sep 01, 2003 at 12:13:11AM -0600, Dave Gomboc wrote:
> I've been trying to set things up so that code is written for T that can
> then also use nilable<T> seamlessly, but doing things the other way around
> might be an improvement.

Agreed.

> > [Brian McNamara]
> > I was originally arguing with Joel because I thought he wanted to use
> > exactly "nv" and not anything like "nv.get()". I think now that we've
> > cleared up the confusion about get() returning a reference instead of a
> > pointer, we're all back on the same page.
>
> Well, I guess you're still arguing with me ;-) because I _do_ want to use
> exactly "nv" and not anything like "nv.get()". I don't like get() because
> I cannot write x.get() when x is a POD. This would mean I have to support
> nilable<T> and T with different code, which is exactly what I'm trying to
> avoid.

This is trivial to fix:

   // Adapters to uniform-ify the interface
   template <class T>
   nilable<T> adapt( T x ) { return nilable<T>(x); }
   
   template <class T>
   nilable<T> adapt( nilable<T> x ) { return x; }

   // generic function
   template <class T>
   void do_something( nilable<T> x ) { ... }

   // examples demonstrating how code looks same regardless of type
   do_something( adapt( 3 ) );
   do_something( adapt( nilable<int>(3) ) );
   do_something( adapt( foo ) ); // foo has unknown type
   

-- 
-Brian McNamara (lorgon_at_[hidden])

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk