As I am using a variety of libraries for my projects, and while I will standardize on using ublas::matrix and ublas::vector, the other libraries use a variety of C-style array/matrix, stl::vector, and homegrown libraries.  I am looking for a relatively straightforward way to pass in my ublas vectors/matricies to these functions without copying all of the values, etc.  For now, I can focus on dense column:major only, with assumption of no reallocation/resizing.

I have seen some discussion about getting the raw pointer to the matrix/vector libraries, but I am having trouble getting it to work.  Also have heard about adaptors, but don't quite understand what people are talking about.

It key cases are:
1) std::vector
The faq suggests using a copy iterator to go between them, but I don't want to copy the data.  std::vector does support initialization from a data pointer...  I would love something like:

ublas::vector<double> v(4);
std::vector<double>& v_std = ublas_to_std_vector<double>(v);
//Or better yet, if I could define a cast for this?

2) C-style array and matrix:
a) Want to be able to pass in the matrix or vector to C style functions:
   //Couldn't get matrix type operators to work.  I tried to various permutations on:
    ublas::matrix<int> A2(2,2);
    int** Ap2;
    Ap2 = &(A2.data()[0]);
    Ap2[0][0] = 1;
   //It appears that for matrices, the data() returns back an int* instead of an int** which is what most functions require.  Perhaps there is an unsafe cast that would solve this problem?  I can't figure out how to trick C style int** matrices to think they are of size NxN from a raw pointer without allocating data to determine pointer offsets.

   //The following seemed to work for ublas::vector though.
    ublas::vector<int> A(2);
    int* Ap;
    Ap = &(A.data()[0]);
    Ap[0] = 1;

b) If C style functions return data, would like to put the ublas wrapper around them.  I assume this is done with calling a constructor on ublas::matrix or ublas::vector with the pointer.

3) Home Grown matrix libraries:
A million exist, and nearly all seem to have constructors for passing in a pointer to data, so I think the problem
Maybe a cast/function could be written to do this generically since the concept of a copy constructor with pointers may be all that is needed from the library?  But I don't know enough about generic programming/casts to write this myself.  Is the best way to deal with this stuff to define a reinterpret_cast?  If so, any good examples of how to do so and how to add these to libraries without modifying the underlying boost::ublas, etc.?

Any ideas or example code for this kind of stuff?

Thanks for your help,