• Advertisement


This topic is now archived and is closed to further replies.

C++ Interitance and functions within functions

This topic is 6179 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

A while ago someone made a post in the forums about how PASCAL has functions within functions and how neat it would be if C++ had that too. One reply to the thread was that you could declare a struct or a class inside a function, and it could have member functions. Of course as I read all that I said to myself "Why the #$&@? I would never want to do any such thing!" So today, as I was working on a tool, and pondering, ... and then I wrot this code:
void CChunkPackerApp::OnPopupChunkproperties() 
	// NOTE 1. Now this is really bizar! Why the C++ Language allows things like this, I don''t know!!!

	// This is a struct inside a function that inherits from a class... and its all valid syntax, and it works too.

	// NOTE 2. The PromptProperties() function needs to operate on the context of CChunkInfo, but 

	// CChunkInfo has no knowledge of property dialog boxes or the dialog templates or the resource IDs.

	struct CPropableChunkInfo : public CChunkInfo
		void PromptProperties()
			// Construct the dialog box

			CPropertySheet propSheet;
			CChunkPropPage1 propPage1;
			CChunkPropPage2 propPage2;

			// TODO: Set the data into the dialog


			// Hide the apply button and the help button

			propSheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
			propSheet.m_psh.dwFlags &= ~PSH_HASHELP;
			propPage1.m_psp.dwFlags &= ~PSP_HASHELP;  
			propPage2.m_psp.dwFlags &= ~PSP_HASHELP;  

			// Prompt the user to change the data

			propSheet.SetTitle( "Chunk Properties" );

			if( IDOK != propSheet.DoModal() )
			// TODO: Set My Data Members from the dialog.


	// Get the Selected Chunk

	CPropableChunkInfo* pci = (CPropableChunkInfo*)_GetWorkspaceDocument()->GetCurSelChunk();
	// Prompt the user for properties.

	if( pci != NULL )
Well, I guess I should never say never.

Share this post

Link to post
Share on other sites
The struct has limits though so better check your c++ standard.

Share this post

Link to post
Share on other sites
I''m using MSVC++6 to make Win32 tools for my designers, and I use Metrowerks for the PSX2 for the game engine.

What are the limitations of struct? As far as I know, struct and class are exactly the same in C++, except that struct members by default are public, class members by default are private.

If I explicitly use public, private, and protected thoughout my class and struct declarations and never assume anything about defaults, I should be able to use struct and class keywords interchangably. Why would the compiler care?

Share this post

Link to post
Share on other sites
There''s a slight difference between the way pascal (& Delphi) handle embedded functions and they way C++ handles nested classes.

A nested class in C++ is a class just-the-same with a different scope (perhaps lifetime as well when nested inside a function). Whereas in pascal, an embedded function also has context, which means it can access variables in the parent function (without passing them in - it knows where it lives, so to speak).

Incidentally, pascal has no scope resolution operator (that I know of anyway), so if you declare a local variable with the same name as a parent variable, you can''t access the parent variable

It may be of little consequence, but I had to sit through a mind-numbingly boring class to learn that, so I feel compelled to spread the torment whenever I can

But you bring up an interesting point - you could make a local functor object (overload operator()) and voila! a nested function in C++. I''ll definetly remember that - I hate creating private methods for simple stuff that I do repetedly in a single function - and I''ll break out the trout if I hear anything about a macro . Thanks!

Magmai Kai Holmlor
- The disgruntled & disillusioned

Share this post

Link to post
Share on other sites

  • Advertisement