|
The typedef keyword creates a new name for an existing type. Using your example,
typedef struct a {
int c;
int b;
} ddd; you can use the following:
struct a a1;
ddd a2; This can be very useful when the existing name for a type is complicated (for example, with templates in C++).
|
|
|
|
|
thanks friend.
how to understand ddd here? what does it denote? thanks
Li Zhiyuan
|
|
|
|
|
ddd is simply another name for the original struct a type.
Let me create another example for you:
template <typename integer>
class Process {
public:
Process(integer initial)
: Initial(initial)
{ };
private:
integer Initial;
};
typedef Process<unsigned long> ProcessULong; Now, rather than having to type "Process<unsigned long> " every time you want to declare a value of this type, you can simply use "ProcessULong ", like this:
ProcessULong PUL1; typedef 's are simply a convenience. They don't create a new type. They simply make a new name for an existing type.
|
|
|
|
|
Hello everyone,
I am studying the C++ Standard Library book. In 6.3 Deques, it is mentioned,
1.
Iterators must be smart pointers of a special type rather than ordinary pointers because they must jump between different blocks.
What means "smart pointers of a special type" here? I do not understand if smart pointers here means auto_ptr something.
2.
In systems that have size limitations for blocks of memory (for example, some PC systems), a deque might contain more elements because it uses more than one block of memory. Thus, max_size() might be larger for deques.
I do not quite understand why we need special care about "more elements, ... more than one block of memory". I have this confusion is because deque is implemented as chunks of memory internally, which is already more than one blocks of memory, it has nothing to do with size limitations. What does the author mean here?
Why "max_size() might be larger for deques"?
thanks in advance,
George
|
|
|
|
|
1. "smart" means that the iterators must overload e.g. the ++ and -- operators to deal with non-contiguous memory blocks. That means a deque iterator must be a class type as opposed to a vector iterator which can be a plain pointer.
2. Did you miss the part that says: "Deques have the following differences compared with the abilities of vectors"? Vectors must be in contiguous memory, deques may have multiple separate blocks. If the size of a contiguous memory block is limited, deques may grow bigger than vectors.
|
|
|
|
|
Thanks markkuk,
1.
markkuk wrote: 1. "smart" means that the iterators must overload e.g. the ++ and -- operators to deal with non-contiguous memory blocks. That means a deque iterator must be a class type as opposed to a vector iterator which can be a plain pointer.
Thanks. Your description is clear. So it does not mean auto_ptr, just mean the pointer is not a plain raw point to deal with contigious memory block. Right?
2.
"the ++ and -- operators to deal with non-contiguous memory blocks", I think for deque, it involves move between different internal chunks (which are not continuous in memory address), right?
3.
Is it a must vector must use continuous memory block? I think it is not a must and if not a must, then for vector, it should be also smart pointer?
regards,
George
|
|
|
|
|
Hello everyone,
For random access iterator, operator[] is supported. Mentioned in Bjarne's book, Chapter 19 (Iterators and Allocators).
I have not used operator[] on random access iterator before and I have not found a good and simple sample either.
Could anyone show its usage with some pseudo code please?
thanks in advance,
George
|
|
|
|
|
|
Thanks Steve!
Question answered.
regards,
George
|
|
|
|
|
Hello !
I wish to create a windows service using MFC\C\C++ in Visual Studio 6.0 (not using .NET !!).
How ?
Amit
|
|
|
|
|
Codeproject has articles about it did you search for them?
|
|
|
|
|
I searched for articles about it in CodeProject but found only articles using C#\.NET to create windows services - I wish to use C\C++\MFC
|
|
|
|
|
|
Hi all,
I just wanted to know if we can superimpose text over video. like subtitles in DVD. can i do this in mfc? do i need to use some other technology to do this?
|
|
|
|
|
One way is to use DirectShow[^] for the video. There's a video mixing renderer (VMR)
that does bitmap-on-video overlays.
If you render the video yourself, or have access to the video frames, you can draw
on them before or as they are rendered.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Many years ago, Jeffrey Richter wrote a program to show how to delete a program itself when it was closed. It sounds very funny, and I tried this program yesterday. I saidly found that the program does deleted but the temp file still exist. It seems that FILE_FLAG_DELETE_ON_CLOSE flag doesn't work on a exe file.
Here is the source code.Any one knowns why the temp file doesn't get deleted?
int WINAPI _tWinMain(HINSTANCE h, HINSTANCE b, LPTSTR psz, int n)<br />
{<br />
if (__argc == 1) <br />
{<br />
TCHAR szPathOrig[_MAX_PATH], szPathClone[_MAX_PATH];<br />
GetModuleFileName(NULL, szPathOrig, _MAX_PATH);<br />
GetTempPath(_MAX_PATH, szPathClone);<br />
GetTempFileName(szPathClone, __TEXT("Del"), 0, szPathClone);<br />
CopyFile(szPathOrig, szPathClone, FALSE);<br />
HANDLE hfile = CreateFile(szPathClone, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL);<br />
TCHAR szCmdLine[512];<br />
HANDLE hProcessOrig = OpenProcess(SYNCHRONIZE, TRUE, GetCurrentProcessId());<br />
wsprintf(szCmdLine, __TEXT("%s %d \"%s\""), szPathClone, hProcessOrig, szPathOrig);<br />
STARTUPINFO si;<br />
ZeroMemory(&si, sizeof(si));<br />
si.cb = sizeof(si);<br />
PROCESS_INFORMATION pi;<br />
CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);<br />
CloseHandle(hProcessOrig);<br />
CloseHandle(hfile);<br />
}<br />
else<br />
{<br />
HANDLE hProcessOrig = (HANDLE) _ttoi(__targv[1]);<br />
WaitForSingleObject(hProcessOrig, INFINITE);<br />
CloseHandle(hProcessOrig);<br />
DeleteFile(__targv[2]);<br />
}<br />
return(0);<br />
}
A Chinese VC++ programmer
|
|
|
|
|
I didnt try to it but maybe you can run a batch file and on that file write for delete your file and itself when you want to close your program.
|
|
|
|
|
Thank you!
What you said is one of the many ways to delete a program itself.
A Chinese VC++ programmer
|
|
|
|
|
You're welcome.
|
|
|
|
|
in my current project i need to create/delete a user/group using win32 apis ,
is it possible to do so ...If so whats the api i need to call ??
|
|
|
|
|
|
Thanks mark .....
vineesh
|
|
|
|
|
And this great book «Programming Server-Side Applications for Microsoft Windows 2000» will help you a lot.
A Chinese VC++ programmer
|
|
|
|
|
Hi, i have a variable of type float that get a return value
thats greater than what float or double, long double etc can hold.
The return data does not need to be so precise, example it holds 1.1520230e-007 when it overflows, and i really just
need 1.1520230. However when the variable overflows like this i cant print it, i cant cast it or move it
to a buffer.
Is there a c\c++ function that truncates it, i have tried to cast the return data as type float but no success.
Also i cant pass it to a buffer to then shorten it later as VS ignores the data except in the debug-watch window.
Any ideas are much appreciated.
Regards, Fred
|
|
|
|
|
Hi Fredrick,
sorry, but this does not make much sense.
Overflow is when a number becomes so large the data type can no longer represent it;
it would happen e.g. when you start with one, and keep multiplying by 10.
1.1520230e-007 is not the same as 1.1520230; it is actually 10 million times smaller.
also a number such as 1.1520230e-007 is far away from overflowing either the float or double type.
I suggest you rethink your problem, and/or reformulate what it is you want.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|