From: William S F. <ws...@fu...> - 2006-09-19 20:10:02
|
Nitro wrote: >> I'm afraid that SWIG doesn't do automatic template instantiation yet, so >> a %template is required for each template. > > I wonder why there is no automatic template instantiation in swig. Are > there any peculiar difficulties regarding automatic template > instantiation? Or is it more because nobody has tried/really wanted it > so far? > I can see that you wouldn't want to have such a feature turned on > globally (code bloat), but it would certainly be nice to have. Is there > a single entry point somewhere in swig which is called when a template > invocation happened somewhere? If yes, then it would probably be easy to > hook swig there and to issue the necessary %template statements to > generate the necessary code. If there's no such a point, where would one > have to look for starting this? > Second, would it be possible to generate the necessary %template > statements by looking into swig's xml output? > I'm not really sure of the reason, but I'd guess it is the naming of these things. What do you call them, eg std::vector<std::pair<int, double> > SWIG calls it SWIGTYPE_p_std__vectorTstd__pairTint_double_t_t right now. That is not what I'd call user friendly and not what I'd like to see generated. I guess some new typemaps would solve this, so that we'd have something like: %typemap(tname) std::vector "Vector"; %typemap(tname) int "Integer"; %typemap(tname) double "Double"; %typemap(tname) std::pair "Pair"; Resulting in: std::vector<std::pair<int, double> > - VectorPairIntDouble std::pair<int, double> - PairIntDouble std::vector<int> - VectorInt etc. But then what do you do about pointers and references eg std::vector<int*>. It is looking like the %template syntax is shorter and easier. William |