Member functions C to D

Craig Kuhnert ckuhnert at gmail.com
Wed Oct 7 01:29:22 PDT 2009


Hi
I am trying to convert some code I wrote in C++ to D to give it a try and I have come across some code that I dont know how to convert.
I have simplified the code to illustrate the problem I have.
How do I do this in D?

class IFieldSetter
{
public:
	virtual void SetValue(void * object, const void * value) = 0;
};

template <class C, class T>
class FieldSetter : public IFieldSetter
{
private:
	typedef T (C::* MemberField);
	 MemberField field;

public:
	FieldSetter(MemberField afield)
		: field(afield)
	{}

	void SetTypedValue(C * object, const T& value)
	{
		object->*field = value;
	}
	
	void SetValue(void * object, const void * value)
	{
		SetTypedValue((C*) object, (const T&) value);
	}
};

class MySampleClass
{
public:
	int Status;
	std::string Name;
};

void main(void)
{
	IFieldSetter * StatusSetter = new FieldSetter<MySampleClass,int>(&MySampleClass::Status);
	IFieldSetter * NameSetter   = new FieldSetter<MySampleClass,std::string>(&MySampleClass::Name);

	MySampleClass * a = new MySampleClass();
	MySampleClass * b = new MySampleClass();

	StatusSetter->SetValue(a, (void*)20);
	StatusSetter->SetValue(b, (void*)40);

	NameSetter->SetValue(a, "2002");
	NameSetter->SetValue(b, "2002");
}

Thanks
Craig


More information about the Digitalmars-d-learn mailing list