|
Please post some code, the above scenario is soooooo funny!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
see last message M.Pallini. BTW, how are you ?
|
|
|
|
|
What's the last message?
BTW Voting 1 won't help you.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
=the last reply in the whole set of recursive replies related to the forum thread.(the reply where I replied to myself).
I always vote either 1 or 2 or 5.
|
|
|
|
|
hINTModuleState wrote: the reply where I replied to myself
OK.
hINTModuleState wrote: I always vote either 1 or 2 or 5.
This is (of course) up to you. I was pointing out that our replies were indeed reasonable, since you possibly want to insist on bad design, and providing a cluttered scenario to justify your choice. You're basically saying (roughly):"Ok this is an ugly trick but I want it because my scenario is complex", that is bad design.
I hope toxcct is not looking at this thread, since I'm doing desing philosophical statements.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: since you possibly want to insist on bad design, and providing a cluttered scenario to justify your choice. You're basically saying (roughly):"Ok this is an ugly trick but I want it because my scenario is complex", that is bad design.
If it was not because of the "possibly" adverb, then I would have felt accused. I am a good guy standing on the hand of those who worries about good design ( for the least).
|
|
|
|
|
hINTModuleState wrote: If it was not because of the "possibly" adverb, then I would have felt accused.
Well, I give a chance even to the worst coder (I'm kidding).
hINTModuleState wrote: I am a good guy standing on the hand of those who worries about good design ( for the least).
You're a good guy who possibly needs a deeper knowledge about OOP .
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Usually the purpose is not to fool the compiler...
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: Usually the purpose is not to fool the compiler...
Which was my point here: [.]
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Thank you, following the link I got the today's CP memorable quote[^].
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: Thank you, following the link I got the today's CP memorable quote
Glad to be of service.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Usually functions are declared that way to be certain that an existing object is provided, because otherwise it would not serve any point of calling the function. Compare with the copy constructor.
If you feel you should call that function without a valid object to pass as reference, you have either misunderstood what the function does or the one who declared it didn't understand the concept of references.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Please see my above reply so you understand the scenario I am with.
Thank you.
|
|
|
|
|
Well, when I saw PJ's reply I became unsure whether you actually have a variable but wasn't familiar with the concept of references, or you don't have an object at all.
The small novel in your reply to PJ is hard to understand. It would be easier to understand it if you showed the declarations of the functions.
However, my first reply still stands: either you're using the API the wrong way, or the API is poorly designed. It doesn't matter how obscure the description is of how you are going about it.
Are you sure the class with the private constructor is not implemented as a singleton? When I implement singletons I usually protect the constructors and have a static declared member function such as GetInstance() that would create the object if it hasn't been created earlier, but hand out a pointer to it if the object already exists.
If this is the case you could get hold of the one and only object there is to pass and as I understand your description that would solve your problem.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
i tried to make it more clear in the last message, ie the unclear novel I recited.
there were neither a getinstance internal methode neither a createinstance inside a helper class factory.
Thank you anyway.(note the solution i was given : it fools the compiler and it was just what i wanted).
|
|
|
|
|
hINTModuleState wrote: note the solution i was given : it fools the compiler and it was just what i wanted
Mmmm, I saw the "solution" and I thought "this is exactly why it's been said about C++ that it's harder to shoot yourself in the foot than in C, but when you do it blows your whole leg off".
At the best, the API is poorly designed and this will actually work, which means that the programmer that designed the API didn't really know how to use references and their purpose.
At the worst, it seems to work, but it will crash later after you've distributed the application under obscure circumstances. Then you'll have an angry customer, or several, that requires an immediate fix and you have no idea of how to solve it.
Either way you will end up with a solution that you cannot really rely on and it will be "proven by use".
Best of luck!
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
the things you are saying are not to be questioned. They are full of logic.
Actually the API is well designed. It uses all sorts of OO things and others,etc well in place : const, reference types,public, protected..
As I tried to explain in the bottom replay (the one I replied to myself) the case I am with and the context where I am trying to shout myself in the foot is just a case where I want to ensure a part of code to be well designed, compact and easy to improve. The leg wo'nt be blown off hopefully.
|
|
|
|
|
Do you mean to pass an invalid reference, like passing a NULL pointer? That can cause the program to crash and I can't imagine why you would want to do that. If that's what you want to do, then you can pass a dereferenced NULL pointer. But if the function tries to use that variable it will crash.
void foo(vartype& a);
vartype* ptr = NULL;
foo(*ptr);
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
Thank you so much.
modified on Thursday, November 20, 2008 4:15 AM
|
|
|
|
|
The callback which accepts a reference is :
void CClassB::OnProcessThisThing(T &t,..other params)
{
}
It is not but an override of a virtual function declared in the base class fromwhich the class
CClassB is deriving :
class CClassA {
protected :
virtual void OnProcessThisThing(T &t,..other params);
};
CClassA resides in an external library, an external lcode.(I only got the .h : so I cannot change it).
class CClassB :public CClassA.
CClassB is in my own code which depends on the above thirdparty library.
.
From within CClassB::OnProcessThisThing() I have to deal with an execution case that is triggered
asynchronously. (The external library code, triggers the virtual function in the base class, then
my override method gets focus.).
The reaction code to put in CClassB::OnProcessThisThing is complex.
Adds to that the fact that I have a very other scenario where I would need to execute the same
same reactionn code. Why would I have to make a copy and paste (two separate functions)
if I can merge the two things. Moreover
the two scenarios are coupled : the processing done in reaction to the first scenario
whereby the external code triggers the function, affects the very data and information received by it
when it is triggered internally following the second scenario. Hence merge the two things in a same bloc code
helps me tackle that interaction and easily understand my code.
Now the problem I encountered is how to call that function internally if it has that reference type
parameter.
That is what it was about.
|
|
|
|
|
In the above scenario, composition is better than inheritance.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I'm afraid I didnot understand M.Pallini.
|
|
|
|
|
Instead of inherit from ClassA , your ClassB should have an instance of ClassA as its own member, and delegate to such a member the shared functionality.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
modified on Thursday, November 20, 2008 6:05 AM
|
|
|
|
|
I see.
Anyway I have now metamorphozed the whole thing and no more need to fool the compiler.
Just to shif the discussion subject, do you rememeber that class XXX and class XXXImpl case ?
I just found an interesting use case in Poco C++ library wheer the XXX class delegates all work to the XXXImpl that is relevant to the target implementation plateform. (XXXImpl for Win32, XXXImp for Unix,etc).
Anyway just a flashback to something we talked about.
|
|
|
|
|
hINTModuleState wrote: I just found an interesting use case in Poco C++ library wheer the XXX class delegates all work to the XXXImpl that is relevant to the target implementation plateform. (XXXImpl for Win32, XXXImp for Unix,etc).
It's a real life example of the Bridge Design Pattern [^], I suppose.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|