Re: How to return a reference, when I really need it
On Jul 31, 8:27 am, BlackLight <blackligh...@gmail.com> wrote:
A little out of order... addressing your actual question first:
or something like that, and this is not possible returning the Vector
object as a value. But if I declare a local Vector object and I return
its reference, I've got a problem as returning the reference of a
local variable. Has any of you a solution for this?
1) Use RVO. See the Parashift C++ faq, item 10.9.
2) Binding the automatic to a const reference will extend its lifetime
ex.,
const Vector& t = somematrix[3];
But it _has_ to be a const reference so you're limited with what
you can do with it.
Some other comments:
Vector Matrix::operator[] (size_t i) throw() {
if (i >= rows)
throw InvalidMatrixIndexException();
Why do you have throw() when you actually throw? (rhetorical, don't
really need to answer..)
(fundamentally a wrapping around vector<float> I wrote for doing
cool mathematical tricks, like sums, scalar products, norms
etc.).
I'd inherit from std::valarray instead and you'll get some of this
stuff for free.
Matrix A;
A[0][0] = 1.0;
You could save your data as a std::vector of std::vector (or
valarray, as I mentioned) rows. Then just return the reference
to the row. You'd get this (particular) notation for free.
Ex.,
std::vector< std::vector<float> > matrix_data;
typedef std::vector< std::vector<float> >::reference ref
ref Matrix::operator[](size_t i) {
return matrix_data.at(i);
}
--Jonathan