|
Boost Users : |
From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2006-08-29 17:25:36
Hello,
I have a small problem. Some of my data holders have dereference operator
which returns refernces to contained types. The problem I face here is that
I have some noncopyable types and the dereference operator fails to compile.
I thought using a reference_wrapper class could do the trick, but then I can
not call functions on the contained type without explict casting, regardless
operator T&() const defined.
here is a small test app to simulate the behavior:
#include <boost/ref.hpp>
#include <boost/array.hpp>
#include <boost/utility.hpp>
using namespace std;
template<class T>
struct test
{
test() : ptr(new T())
{}
~test()
{
delete ptr;
}
boost::reference_wrapper<T> operator*()
{
return boost::ref(*ptr);
}
T* ptr;
};
template<class T, int N>
class array : public boost::array<T,N>
, private boost::noncopyable
{};
int main(int argc, char* argv[])
{
test< array<int,10> > t;
int size = (static_cast<array<int,10>&>(*t)).size();
}
Is there any way to call the last line like:
int size = (*t).size();
operator ->() would work just fine, but I need to support both.
Thanks for help,
Ovanes Markarian
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net