Jon Stewart on 6 Aug 2003 21:39:33 -0000


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

[ALACPP] problem with const


I have a wrapper class, which contains nothing but a reference as member 
data. Like all member references, I initialize it upon construction.

class Wrapper {
public:
	Wrapper(Foo& f) : m_Foo(f) {}

private:
	Foo& m_Foo;
};

(I'm leaving out all the convenience functions which Wrapper provides, as 
they are irrelevant to the problem.)

The problem is, what if I want to construct a Wrapper off of a const Foo 
reference? It's perfectly acceptable to limit myself to a const Wrapper; 
nonetheless, this won't compile:

const Wrapper w(myConstFooReference);

What can you do? Well, since we can't get what we want (const deduction by 
the compiler), we can either abandon the language entirely or engage in a 
bit of a work-around:

template<class FooType = Foo>
class Wrapper {
public:
	Wrapper(FooType& f) : m_Foo(f) {}

private:
	FooType& m_Foo;
};

Then, to get the correct const semantics:

const Wrapper<const Foo> w(myConstFooReference);

Ugly, but it works.

Critiques?



Jon
-- 
Jon Stewart                                 Advanced Los Angeles C++
stew1@xxxxxxxxxxx                           http://www.alacpp.org
_______________________________________________
alacpp mailing list
alacpp@xxxxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/alacpp