J
joecook
Altering a temporary is perfectly legal, for example:
std::vector<int> vec(40);
std::vector<int>(4).swap(vec); //legal.
I am trying to get this same functionality, but within an assignment
operator, but can't seem to find a good way to bind the temporary.
For example:
class Foo;
int main()
{
Foo f;
f = Foo(20);
}
#include <vector>
class Foo
{
public:
Foo(int size=0) { m_data.resize(size);}
// PROBLEM HERE. The temporary can't be bound to a reference to non-
const
// But if this were 'const reference', the swap function could not
be called using it.
void operator=(Foo& foo)
{
m_data.swap(foo.m_data);
}
std::vector<int> m_data;
};
The only work-around I could think of was this ugly code:
void operator=(const Foo& foo)
{
std::vector<T>* tmpVec = const_cast<std::vector<T>*>(foo.m_data);
tmpVec->swap(m_data);
}
Any better suggestions?
Thanks,
Joe
std::vector<int> vec(40);
std::vector<int>(4).swap(vec); //legal.
I am trying to get this same functionality, but within an assignment
operator, but can't seem to find a good way to bind the temporary.
For example:
class Foo;
int main()
{
Foo f;
f = Foo(20);
}
#include <vector>
class Foo
{
public:
Foo(int size=0) { m_data.resize(size);}
// PROBLEM HERE. The temporary can't be bound to a reference to non-
const
// But if this were 'const reference', the swap function could not
be called using it.
void operator=(Foo& foo)
{
m_data.swap(foo.m_data);
}
std::vector<int> m_data;
};
The only work-around I could think of was this ugly code:
void operator=(const Foo& foo)
{
std::vector<T>* tmpVec = const_cast<std::vector<T>*>(foo.m_data);
tmpVec->swap(m_data);
}
Any better suggestions?
Thanks,
Joe