Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » Community » U++ community news and announcements » New graph packages
Re: New graph packages [message #35667 is a reply to message #35662] Sun, 11 March 2012 19:50 Go to previous messageGo to previous message
Didier is currently offline  Didier
Messages: 680
Registered: November 2008
Location: France
Contributor
Hello Koldo,

Quote:

I have tried to understand your changes unsuccessfully. It is difficult for me to follow the changes in the files.

The changes I made are not functionnal modifications.
The idea is to move the common code from class A to a new template class: B.
The original class (A) then inherits from B: class a : public B {};
==> Class A therefore ahs the same methods as before, except for one (big) difference:
The return type of the methods : B::x() can only be of type B and not A Confused
Usually in Upp method calls are chained: we write : x0().x1().x2()

So if I do
class a : public B {};
==> the method chaining is then broken Crying or Very Sad

To prevent this, we can use CRTP in order to have correct return types
CRTP


Better than long text here is an example:
-------------------- Case 1 : the original code
class OriginalClass {
	public:
	OriginalClass() {}
	OriginalClass& fctA() { .....; return *this; }
	OriginalClass& fctD() { .....; return *this; }
};


we can write :
OriginalClass inst;
isnt.fctA().fctB();
but all is contained in 1 class Confused


-------------------- Case 2 : naive separation (does not work)
class BaseClass {
	public:
	BaseClass() {}
	BaseClass& fctA() { .....; return *this; }
};
class DerivedClass : public  BaseClass {
	public:
	DerivedClass() {}
	DerivedClass& fctD() { return *this; }
};

==> we ##CAN NOT## write :
DerivedClass inst;
isnt.fctA().fctB();    ==> compilation error
Crying or Very Sad

-------------------- Case 3 : separation using CRTP
template<class DERIVED>
class BaseClass {
	public:
	BaseClass() {}
	DERIVED& fctA() { return *static_cast<DERIVED*>(this); }
};
class DerivedClass : public  BaseClass<DerivedClass> {
	public:
	DerivedClass() {}
	DerivedClass& fctD() { return *this; }
};


==> We CAN write :
DerivedClass inst;
isnt.fctA().fctB();
==> ScatterCtrl still works
and separation has been made Cool Cool Cool ==> I can reuse it !!!

So please reconsider Uh Oh these changes since I only MOVED code and NOT CHANGED code.

[Updated on: Sun, 11 March 2012 19:55]

Report message to a moderator

 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message icon14.gif
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: New pick/clone notation now merged into trunk
Next Topic: Testing of migrated and upgraded forum
Goto Forum:
  


Current Time: Fri May 10 02:24:52 CEST 2024

Total time taken to generate the page: 0.02314 seconds