On Fri, Jul 07, 2006 at 10:31:43PM -0400, Michael Dickens wrote: > > OK. So what's the difference between: > > const std::vector<float> &taps > and > const std::vector<float> taps > > in terms of the way Python -> SWIG -> C++ works?
Using the default typemaps that convert Python lists/tuples to STL vectors, there is no difference. The default typemaps will convert the Python sequence into a STL vector by copying the elements. > In C++, the "&" is a reference to - no copying, and "const" means > that you can't change it at the destination (or, rather that the > compiler will complain if you try to ;). Does a reference (not > copying) really hold true for moving data from Python to C++? You're going to want to read up on SWIG typemaps... Have fun ;) > That would imply that the underlying > data structure is the same between them ... which I can understand > for the "usual" types (char, short, int, long, float, double, > etc...) ... so how would that work with a C++ class such as > std::vector? Does Python actually implement a "list" (e.g. "[5,6]") > as a std::vector, and hence allow for reference passing? Nope. Two reasons: [5, "second", [3, 4, lambda a, b: a + b], 28+3j] Python's coded in C > OK. That's a bit off-topic; just curious. Sounds like I can use > wither "&foo" or "foo" so long as it's "const". Good. I'll try that > tomorrow. Hopefully my problem was elsewhere. OK. > >>3) Is it possible to assign default values to only -some- arguments > >>to the "friend" method? I can see some codes which assign default > >>values to -all- arguments, while most do none. > > > >It's a C++ thing. Everything to the right of the first argument > >with a default value must also have a default value. > > Yes yes, standard C++ ;-) In the context of how SWIG interprets the > declarations for the friend method(s), that's my question. I tried > having the last 3 arguments of the friend method have defaults (of 7, > so 4 required, 3 optional), but then the instantiation from Python > doesn't work. Could be that I messed up something else along the > way, but this was the last change I made (removing the 3 default > values) and -poof- things worked again. Should work OK. Be sure that the C++ .h and the .i files agree. > >Yes, you can have multiple constructors, but they need to have > >different names. (If they have the same name, C++ can sort them out > >at compile time based on argument type at the calling site, but Python > >can't do that because of its dynamic typing.) > > Ah, so just name the friend method differently than that of the > "default" friend method? Hmmm, I'll try that tomorrow when I have a > chance. Clearly for a given C++ class, the constructor names will be > the same but with different arguments ... so the difference has to > come in the friend naming. I would guess it would require it's own > GR_SWIG_BLOCK_MAGIC stuff too, with the different friend name? The second constructor will require a subset of what's in GR_SWIG_BLOCK_MAGIC. Probably just the renaming part. Eric _______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org http://lists.gnu.org/mailman/listinfo/discuss-gnuradio