[vtk-developers] Added support for std::vector to the wrappers
david.gobbi at gmail.com
Wed Sep 5 12:20:32 EDT 2018
Yesterday I merged a patch that allows std::vector<T> to be used from the
Python wrappers, where T can be 'std::string' or any numeric type from
'signed char' to 'float' (including typedefs to those types).
This means that if you add a C++ method to VTK that takes
std::vector<std::string>, then in Python you can pass a list or any other
Python sequence and the wrappers will convert it to a vector for you.
Method examples that can accept any Python sequence:
void SetStrings(std::vector<std::string> strings);
void SetStrings(const std::vector<std::string>& strings);
Method example that takes a Python mutable sequence (the C++ method can
write back to the container, since this is pass-by-reference):
void GetStrings(std::vector<std::string>& strings);
Method examples that return a vector (which is converted to a Python tuple):
const std::vector<std::string>& GetStrings();
Note that std::vector is not 'wrapped' per se. Instead, what is going on
here is that the wrappers are converting to/from Python container types. My
primary goal was convenience rather than efficiency, we can always add a
wrapped std::vector type at a later date without sacrificing the
convenience of automatic conversion.
Chances are good that I'll be able to add std::vectors of VTK objects
(smart or dumb pointers) and vtkVariant before VTK 9, but only if someone
adds methods to VTK that take parameters of those types (as far as I know,
there aren't any yet).
See the following VTK gitlab issue for additional information:
The following is a list of VTK methods that take std::vector that have been
wrapped due to this change (it is a short list, since people have
historically avoided using std::vector as part of the VTK public API due to
the obvious reason that they didn't want to exclude their methods from
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the vtk-developers