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.AddPage(&propPage1);
propSheet.AddPage(&propPage2);
propSheet.SetTitle( "Chunk Properties" );
if( IDOK != propSheet.DoModal() )
return;
// 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 )
pci->PromptProperties();
}
Well, I guess I should never say never.
C++ Interitance and functions within functions
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:
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?
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?
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
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
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement