jeudi 31 août 2017

C++: elegant "polymorphism" with STL types and custom types?

Let's say I have a custom implementation of std::vector named my_vector, and they have the same interface.

There are many functions that take std::vector (or its pointer/reference) as input. I want to make as little modification as possible to these functions, while allowing them to accept either std::vector or my_vector.

Replacing these functions with function templates is a way to go, but there seem to be a lot of change (and hence difficult to rollback), and they can't do type checking unless I use std::is_same to further complicate them. Function overloading is another alternative, but it entails duplicating the code, and is also difficult to rollback the change.

Question: can I design a wrapper type Vector for std::vector and my_vector, and let those functions accept Vector (or its pointer/reference) instead? But the problem with polymorphism is std::vector can't inherit a custom class.

Ideally, the code should similar to this (not required to be the same) :

Definition of function:

// void foo(std::vector vec) {...} // old
void foo(Vector vec) {...}  // new

Use the function:

std::vector<char> stdvec(5,'a');
my_vector<char> myvec(5,'a');
...

foo(stdvec);
foo(myvec);

Thanks!

Aucun commentaire:

Enregistrer un commentaire