Safer casts

Koroskin Denis 2korden at gmail.com
Sun May 11 09:47:00 PDT 2008


On Sun, 11 May 2008 19:47:14 +0400, Yigal Chripun <yigal100 at gmail.com>  
wrote:

> Janice Caron wrote:
>> On 11/05/2008, Yigal Chripun <yigal100 at gmail.com> wrote:
>>> I want to be able to do this:
>>>  List!(T) col = new LinkedList!(T);
>>>
>>>  and be able to change the linked list to a vector in the future (or  
>>> any
>>>  other suitable collection) with the changes limited to this line  
>>> alone.
>>>  is it possible with templates?
>>

Well, yes, is possible. Even with STL.

A typical trick I often do is this:

typedef std::vector<Item*> Items;
Items items;

items.pushBack(new Item());
Item* item = items.front();
Items::iterator it = std::find(items.begin(), items.end(), someItem);
if (it != items.end()) {
	items.erase(it);
}
std::sort(items.begin(), items.end());
// etc

And now if I decide to exchange vector with list or deque or anything else,
all I need to do is to change a single line:

typedef std::list<Item*> Items;

I don't say that it is the best way to stick with, but it usually works.

> ight...
> and what about my function?
> void WalkListAndDoSomething(List!(T) list);

Use templates. Or use polymorhism, if you expect containers to implement  
some generic interface.



More information about the Digitalmars-d mailing list