[LLVMdev] API design (and Boost and tr1)
Chris Lattner
sabre at nondot.org
Thu Jul 5 09:54:12 PDT 2007
On Thu, 5 Jul 2007, David Greene wrote:
>>> 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.
That sounds reasonable. Please keep the "Value* + num elements" ctor as
well though.
Here's another crazy idea. Instead of overloading the callinst ctor, why
not just add a static function to create the call (like binaryoperator and
friends):
C = CallInst::CreateWithArgRange(X, B, V.begin(), V.end());
That way you can completely avoid the overloading issues.
-Chris
--
http://nondot.org/sabre/
http://llvm.org/
More information about the llvm-dev
mailing list