|
George_George wrote: in post #2, what do the following statements mean? Especially the additional [2] after "str" and ["str"] after 1? Any ideas?
George_George wrote: * ( ( char * ) & var ) = "str"[2]; // * ((char *)&var) too
it is nothing but subscripting an array, here "str" is an constant array of string.
it is same as
const char * const szText = "str"; or const char szText[] = {"str"};
* ( ( char * ) & var ) = szText[2];
George_George wrote: varref = 1["str"]; // varref is also an lvalue
"the subscript operator [] is interpreted in such a way that E1[E2]
is identical to *((E1)+(E2))" from C++ std.
I think 1["str"] is tricking the above expression to *((1) + (pointer to "str")) that is same as "str"[1] which evaluates to *((pointer to "str") + (1)). because adding pointer to index and index to pointer is same.
|
|
|
|
|
Great Rajkumar!!
Cool reply. For this discussion,
http://www.velocityreviews.com/forums/t279868-what-is-lvalue.html[^]
It is mentioned,
struct C
{
C& operator=(int);
};
C() = 5;
Here is the related description,
--------------------
True.
But there are compilers (eg VC++) that do allow to bind non-const references to
temporary as an extension of the standard.
IMO, a conforming compiler should reject the code.
--------------------
I can not see in above code there occurs "bind non-const references to temporary". Do you see it occurs?
regards,
George
|
|
|
|
|
Hello everyone,
I want to learn more about deque, and previously I only have basic concept and samples about deque as a double-ended queue.
My questions are,
1. How it is implemented internally for the performance optimization for get front and end elements? Elements are stored in an array or linked list or?
2. Are there any documents about how to use deque effectively and efficiently (i.e. good patterns and anti-patterns of deque)? I have searched MSDN and Google and only found some sample samples. Any experience sharing or recommended articles?
thanks in advance,
George
|
|
|
|
|
STL has deque implementation, "#include <deque>" and use the std::deque, i think you will get the answers for your question.
|
|
|
|
|
Thanks Rajkumar,
I can debug into it. But the symbols looks -- not quite user friendly.
Just want to find out how it is implemented internally and some best practices about how to use it. Any ideas?
regards,
George
|
|
|
|
|
1 - from wikipedia[^] :
"There are at least two common ways to efficiently implement a deque: with a modified dynamic array or with a doubly-linked list. For information about doubly-linked lists, see the linked list article."
2 - deque is a very simple data structure, there is no good or bad patterns to use it, you simply add to the front or back of the queue.
also see this excellent article : http://www.codeproject.com/KB/stl/vector_vs_deque.aspx[^]
|
|
|
|
|
What's the difference between vector and dequeue ?
I did not read your post carefully.
Maxwell Chen
modified on Saturday, March 1, 2008 7:54 AM
|
|
|
|
|
Hi Maxwell,
I think you can refer to The C++ Standard Library book, section 6.3, and there is a complete list of comparison between deque and vector.
regards,
George
|
|
|
|
|
Thanks!
Maxwell Chen
|
|
|
|
|
Thanks Maximilien!
The recommended reading is great!
I am also reading the book -- The C++ Standard Library, and here is the description of the comparison between vector and deque. Why there is one more level of indirection in deque?
--------------------
The internal structure has one more indirection to access the elements, so element access and iterator movement of deques are usually a bit slower.
--------------------
regards,
George
|
|
|
|
|
dear all
my problem is as follows:
double T;
int halfSize;
int sumMask=0;
int maskNum[5]={0};
double sigma[5]={0.9,1.3,1.65,1.8,2};
int maskSize;
T=0.66;
for (int k=0;k<5;k++)
{
halfSize = static_cast<int>(sqrt(-log(T))*2*pow(sigma[k],2));
maskSize = 2*halfSize + 1;
maskNum[k] = maskSize;
int *maskX;
double *mask;
maskX = new int[maskSize];
mask = new double[maskSize];
for (int j=0;j<maskSize;j++)
{
maskX[k,j]=maskSize/2-(2*k+2-j);
mask[k,j]=exp(-pow(maskX[k,j],2)/2*pow(sigma[k],2));
}
}
error C2668: 'pow' : ambiguous call to overloaded function
i really couldn't find where is problem for pow function. anyone give me suggestion and help me. thanks
Li Zhiyuan
modified on Thursday, February 28, 2008 8:48 PM
|
|
|
|
|
Try a 2.0 instead of 2 in the pow() function. There isn't a pow() that uses an integer as an argument but there are ones for floats and doubles. The compiler doesn't know which one to convert the int to.
|
|
|
|
|
Where do I store information in the registry under VISTA which should remain accessible and modifyable regardless of which user or configuration is active. In XP I stored under:
HKEY_LOCAL_MACHINE/Software/Softguard/...
Because of the nature of the businesses we cater for, we have never supported the MS Security Model. All machines on the LAN would be configured as having open access.We intend that Vista Machines would run under the same modus operandus.
regards,
Bram van Kampen
|
|
|
|
|
To access registry under Vista, the applications should have elevated right, A.K.A. the UAC issue. Therefore to run your application with a limited user privilege might have problem.
Maxwell Chen
|
|
|
|
|
Hi,
The Software I write is independent of the Microsoft Security Model. Typically all terminals installed under XP give all users administrator level control to the entire network. BTW None of the networks are connected to the Internet. Does that mean I have nothing to worry about, and that All will work as Advertised, or do I need to do something additional when I detect a Vista installation.
Regards,
Bram van Kampen
|
|
|
|
|
Bram van Kampen wrote: The Software I write is independent of the Microsoft Security Model. Typically all terminals installed under XP give all users administrator level control to the entire network. BTW None of the networks are connected to the Internet. Does that mean I have nothing to worry about, and that All will work as Advertised, or do I need to do something additional when I detect a Vista installation.
1. Under Vista, any ordinary program applications launched by mouse double-click or by pressing [Enter] key will be running in limited-user mode by default, even the user is of the "Administrators" group.
2. It has nothing related with network connections.
3. To make a program application have elevated privileges when being launched, we have to embed a manifest into the executable file to deal with UAC of Vista.
4. A manifest file is a source file written in XML syntax. To embed a manifest into an executable, you need to use "MT.exe" tool come with Visual C++ or SDK installation.
5. Here is the article about manifest and UAC of Vista. Making your application UAC aware[^]. And you may need to read more related articles. See those further readings in this article. And you may also search with Google for more source.
6. If you use the code sample of manifest in above article, the application might have problem under WinXP. To make it compatible with WinXP, you need to alter the syntax. See the "ms_asmv2" stuff in this article: Create and embed an application manifest[^].
7. This article talks even more about UAC: Understanding and configuring UAC in Vista[^].
Maxwell Chen
|
|
|
|
|
Hi, Thanks.
Still very complicated for just wanting to keep things working like they always worked. I found an article by someone who appears to have clobberred the entire issue with some judicious ASM Code.
http://www.codeproject.com/KB/install/acl_common_data.aspx[^]
I tried it on my Test machine and it appears to work a dream. Many kind thanks though for the explanation and links about what I can only describe as Microsoft's Solution looking for a problem.
Thanks Again,
Bram van Kampen
|
|
|
|
|
Bram van Kampen wrote: I found an article by someone who appears to have clobberred the entire issue with some judicious ASM Code.
http://www.codeproject.com/KB/install/acl_common_data.aspx[^]
I tried it on my Test machine and it appears to work a dream.
Cool! Thanks!
Maxwell Chen
|
|
|
|
|
How can I configure all machines on a Network to run 'Elevated All the Time'
Bram van Kampen
|
|
|
|
|
You shouldn't use HKLM unless your app can run elevated all the time (as mentioned by Mr Chen).
The proper place to put common app data is in the common app data folder provided by the OS,
as described in the Designed for Windows XP Application Specification[^] Section 1, chapter 3.0.
Note the actual folder pathnames have changed in Vista, but the way you get the folder pathnames
programmatically is the same as described in the document.
Windows versions through XP let us get away with using the HKLM key in the registry....no more in Vista.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mark,
Thanks for your reply.
Currently None of my apps write anything to the registry. They use ini files, accessed by an ini file reader, written by me, and accessing ini files also written by me. The software was used under my control to run our businesses. Sofar, Licence issues where not a problem, because I held the only CD in existence. The software was written purely as an indoor aid to our business.
We are now trying to market the software as such, and in order to provide for secure licencing, we have come to the conclusion that a variety of parameters should be stored in the registry rather than in ini files. All I have done sofar has been verified to work from XP down to win95.
The software before attempting to converting to the registry runs successfully and efficiently on machines from win95 upwards. I do not want to loose that compatibility either.
The NT hardware outlay is that All machines run as 'No Administrator Assigned' level. All Machines run my software exclusively, (like a sales terminal in a supermarket) and all Software settings are machine settings. Any form of User customising MUST BE ABSOLUTELY OUTLAWED!!.
Under XP this can be achieved successfully by storing things under HKLM\Software\MySoftware. By reports, Vista would defy this for it's re-directing (or virtualisaton) of this key to HKCU.
So the question becomes: Where do I store System Wide Software Params in the registry in a way that they remain system wide and can be retrieved under any os from win95 to vista
Regards
Bram van Kampen
|
|
|
|
|
Hi Mark,
The thing is I want to get a Starting point to start searching on a Clients Computer on the Network. A good place to make this possible is to write things to the registry. The PC's my software would be installed to would be termed as Sales Terminals. They should be debarred from running or doing anything else but running the Sales Terminal Software. In otherwords, it is a requirement that my software takes over the hardware, and allows no one else near it.
Unbridled Access to HKLM is just one minor step in this game.
The Target Machine is not a machine in an office suite where various sales reps can do their own thing in their own time, this is a machine sitting on a Sales counter, guarding a Cash Drawer. I need exclude the Possibility that at some stage someone may logon differently and use the machine to say write a letter to his aunty. It is a Sales Terminal, Any Other attempted activity Must be Totally and absolutely Barred.
In Other words, I want to configure this machine as one that can do only One Singular Task, i.e. Being a Cash Register. I also need ways on this machine to search, and to have Search Hints in the registry at a Predictable Place,independent of whom managed to log on, i.e. HKLM
Is it possible under Vista to do this, or should I go for an alternative OS.
Bram van Kampen
|
|
|
|
|
|
Cool! Given your requirements in your last post (about the type of software), that could
be a good solution.
Thanks for the link and update!
MArk
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
given a class heirarch where
A is the base class and B , C are derived classes .
Now I want to implement something like an object factory externally where I want to automatically create an object of the appropriate type . For this I define a struct with the definition ( pardon me for the pseudo code as part of the problem is with usage)
typedef struct
{
int code ;
reference_to_type_creator ;
}OBJ_TYPE ;
OBJ_TYPE objTable[] =
{ objA_code , < reference to create an object of type A > } ,
{ objB_code , < reference to create an object of type B > } ,
{ objC_code , < reference to create an object of type C > } ,
{ -1 , NULL } such that I can use this table in a function that processes random object entries
ProcessObject( int objCode )
{
for (int i=0;objTable[i].code!=-1;i++)
{
if( objCode == objTable[i].code)
{
A *a = objTable[i].reference_to_type_creator
a->Foo()
}
}
} I was unclear as to how this reference would be specified in the struct array above and its usage.
Help is appreciated
}
Engineering is the effort !
|
|
|
|