[LLVMdev] API design (and Boost and tr1)

David Greene dag at cray.com
Thu Jul 5 09:35:58 PDT 2007


On Wednesday 04 July 2007 22:37, David A. Greene wrote:
> On Wednesday 04 July 2007 15:46, Chris Lattner wrote:
> > > Since array doesn't have begin/end members we'd need some kind of
> > > specialization for that case.  Iterators nicely avoid this issue.
> >
> > We should just keep the existing constructor, so this isn't a problem.
> > These clients don't have the "dereference end" problem.
>
> Duh.
>
> Yep, ok, this sounds good.

Grr.  That's no so easy either, because it conflicts with the one-argument
specialized constructor.

Either I have to write separate constructors for std::vector<ValType> and
SmallVector<ValType, Size> or I take an alternate approach.

I've opted for the alternate approach: make all clients pass iterators.  That 
is, get rid of the specialized one- and two-argument constructors entirely.

This gets rid of all of these headaches while at the same time reducing code 
size and maintenance costs.  It does require that clients store their 
arguments in an array of some sort, but it's probably not a bad tradeoff.
It at least makes everything consistent.

What do you think?

                                                  -Dave






More information about the llvm-dev mailing list