|
Hi Friends,
Though this is not exactly a ATL/WTL/STL question it is a more general C++ templates question.
My objective is that I want to get a integer value based on a string constant i.e I want to write something similar to
int val = String2Int<"str1">();
int val1 = String2Int<"str2">();
so that depending on the string value as a tempalte arguement I get different integers values.
Is it possible to write some sort of template specialization here?
I do not want to use STL map for string to integer mapping nor do I want to perform some string comparison here.
Please let me know your thoughts.
Thanks in Advance.
|
|
|
|
|
|
You can specialize on non-type parameters:
template<int N>
struct is_66
{
enum{res=false};
};
template<>
struct is_66<66>
{
enum{res=true};
}; The reasons why he still cannot do what he wants are of a different nature.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
Want a Boost forum in Code Project? Vote here[^]!
|
|
|
|
|
Joaquín M López Muñoz wrote:
You can specialize on non-type parameters:
Cool, I try to stay away from template black-magic as much as I can.
I remember that the tricky part is using string literals as template parameters (the C++ FAQ lite has a couple sections on that subject).
--Mike--
LINKS~! Ericahist updated! | 1ClickPicGrabber | CP SearchBar v2.0.2 | C++ Forum FAQ
Strange things are afoot at the U+004B U+20DD
|
|
|
|
|
I'm afraid you cannot use strings as the template parameters of your class in a simple manner: this is nicely explained here[^], for instance, and it also proposes some less-than-perfect workarounds.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
Want a Boost forum in Code Project? Vote here[^]!
|
|
|
|
|
One has to wonder why you'd do this. If I had to pass in a string, I'd use a map here. Why don't you want to do that ? I can't think of any alternative that is not ugly.
Christian
I have several lifelong friends that are New Yorkers but I have always gravitated toward the weirdo's. - Richard Stringer
|
|
|
|
|
Christian Graus wrote:
One has to wonder why you'd do this.
Raw speed. The compiler would do the mapping for you, yielding a constant time complexity at runtime.
Of course, you'd only be able to make static mappings, such mappings that the compiler can resolve.
--
My name in Katakana is ヨルゲン.
My name in German is Jörgen.
My name in Mandarin/Kanji is 乔尔根 西格瓦德森.
My name in Korean is 요르겐.
I blog too now[^]
|
|
|
|
|
So, then, how is it better than declaring a const int or even a define ? All you're asking is for the compiler to substitute a name known at compile time with a number known at compile time, right ?
Christian
I have several lifelong friends that are New Yorkers but I have always gravitated toward the weirdo's. - Richard Stringer
|
|
|
|
|
Christian Graus wrote:
how is it better than declaring a const int or even a define
Flexibility and type safety. Think of macros on steroids.
--
My name in Katakana is ヨルゲン.
My name in German is Jörgen.
My name in Mandarin/Kanji is 乔尔根 西格瓦德森.
My name in Korean is 요르겐.
I blog too now[^]
|
|
|
|
|
Hi Friends,
Thanks for the idea, something like this works for me
extern char str[] = "str1";
extern char str2[] = "str2";
template <const char* str>
struct xyz
{
xyz() { }
operator int()
{
return 0;
}
};
template <>
struct xyz<str>
{
xyz() { }
operator int()
{
return 10;
}
};
template <>
struct xyz<str2>
{
xyz() { }
operator int()
{
return 20;
}
};
int main()
{
int value1 = xyz<str>();
int value2 = xyz<str2>();
return 0;
}
Here value1 will have a value = 10 and
value 2 will have value = 20 after initialization.
May be this is a crude way of doing things but I wanted to find out if it can be done.
Thanks once again
|
|
|
|
|
Hi,
I'm trying to debug an ATL Server project and when I try attach to the dllhost process an "Access Denied" error appears. I'm using Visual Studio 2003 and Windows 2000 SP4. I've been looking in the internet for two days and I've tried all that I found about this topic (I checked the impesonation and the debug programs policies, the "Machine Debugger Manager" service, I verified that I was in the local "Administrators" group, the security of the directories where my DLLs are). I can't find anything else to verify. I would really appreciate if somebody can help me in any way, at least telling me what else could I check.
Thanks,
Federico
|
|
|
|
|
Hello,
I have a monochrome watermark bitmap, which I'd like to render over
COLOR_WINDOW. How to calculate the color to render it?
I'd like it to be lighter than COLOR_WINDOW if the one is dark and I like it
to be more dark than COLOR_WINDOW if the one is light (for example, white).
Thank you, I'm really apreciating any suggestions.
dmitry
|
|
|
|
|
Hi,
I created one window for skinning purpose, and i have changed some types using CreatePolygonRgn, i have created Circle type window. Here i can't visible the minimize and maximize button, how do i set minimize and close button here.
Allways welcome for your valuable suggestions.
regards,
G. Inbakumar.
|
|
|
|
|
Define some areas of your window that will have these effects. Handle the WM_NCHITTEST message. If the area is hit, return HTCLOSE or HTMINBUTTON as appropriate. Otherwise pass the message down to DefWindowProc .
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
How to convert integer to string in ATL?
rajesh
|
|
|
|
|
Which ATL? If it's ATL 7 (i.e. the one that VS.NET), you can use CString::Format. If you're using ATL 3 (i.e. the one with VS6), then you're probably best off using itoa - just make sure your string buffer is big enough!
Stuart Dootson
'Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p'
|
|
|
|
|
Try this:
string itos(int i)
{
stringstream s;
s << i;
return s.str();
}
You'll need to include sstream as well.
CString::Format also works as the other poster says - if in ATL 7.
Kevin
|
|
|
|
|
What String format are your Taking mr Rajesh i.e. BSTR,wchar_t or simple char*.
anyway here is example of each,as TCHAR is defined as
#ifdef UNICODE
#define TCHAR wchar_t
#else
#define TCHAR char
#endif
so for converting intger to string i will use _itot(..)
let integer i=20;
TCHAR IntStr[10];
_itot(i,IntStr,10);
[Vote One Here, Complete my Survey....]
Alok Gupta visit me at http://www.thisisalok.tk
"I Think Believe this Will Help"
|
|
|
|
|
I need to be able to pass a VB Byte-Array accross to a method in an ATL DLL as an argument. Then once it has been passed accross to the ATL method I need to create a vector<unsigned char=""> from the contents. Could someone PLEASE advise how to do this.
|
|
|
|
|
read this, http://support.microsoft.com/kb/218454/EN-US/
|
|
|
|
|
hi,
Windows 98 can support WTL.
inbha
|
|
|
|
|
If your post was a statement: Yes.
If your post was a question: Yes.
--
My name in Katakana is ヨルゲン.
My name in German is Jörgen.
My name in Mandarin/Kanji is 乔尔根 西格瓦德森.
My name in Korean is 요르겐.
I blog too now[^]
|
|
|
|
|
|
hello, i got a ATL COM project that was working just fine in my desktop pc. i later on copy the whole folder to my laptop, and try to compile from there. No compile error or any other error msg is given, but it's just not works when i run it...not works, in terms like just nothing is happen....
i then create a new project, and copy paste all coding from this existing project, and it's working this time...
one difference i noticed is that when i compiled existing project, it never add the entry to window registry...
anyone got any idea for this, pls do let me knows....
thx a lot, in advance....
|
|
|
|
|
How does one convert from ATL::CString into a std::string?
I am the handsome one in the crowd.
|
|
|
|