Re: address of virtual member function passed as template argument
<pascal.zschumme@gmail.com> wrote:
[...]
I want to use Boost.Property and therefor it need to pass
those
addresses to boost::property::object_property<...>
consider the following example:
<code>
class foo
{
private:
int value;
public:
int getValue() const { return value; }
void setValue(const int& v) { value = v; }
boost::scalar_property< boost::object_property
<
char, foo,
&foo::getValue,
&foo::setValue
};
</code>
If you make getValue() oder setValue() virtual, it
crashes.
Well, i could pass pointers to getValue and setValue to
the property
using it's custuctor at RunTime.
But i had to write my own property-lib for that and (more
importantly)
it wouldn't fit into my OOP-system that well. (would be
better if
every devired class _had_ to use getValue and setValue for
their
properties)
I'm not sure whether following code will fit into your
OOP-system or not, but here's the possible solution using
VC++ specific extension:
<code>
class foo
{
private:
int value;
public:
virtual int getValue() const { return value; }
virtual void setValue(const int& v) { value = v; }
__declspec(property(
get = getValue, put = setValue)) int Value;
};
....
foo f;
f.Value = 42; // foo::setValue is called
</code>
Alex