|
-
July 17th, 2008, 11:53 PM
#1
Can I pass string literal for template parameter?
Hi
I'm gonna implement a dynamic type-cast mechanism. I need to give unique ID to all classes, and I think hash value calculated from the name of class would be appropriate.
What I'd like to do is something like this:
Code:
template <char const* const psz>
struct _hash_
{
enum {
value = *psz
? (_hash_<psz+1>::value << 2) | *psz
: 0
};
};
.........
enum {
_classid = _hash_<"cMyClass">::value
};
It produces compile errors. I can imagine the reason, (I'm afraid this is fairly stupid idea :S) but I'd like to know if there's any way around.
Thanks in advance
-
July 18th, 2008, 05:06 AM
#2
Re: Can I pass string literal for template parameter?
 Originally Posted by muse1987
Hi
I'm gonna implement a dynamic type-cast mechanism. I need to give unique ID to all classes, and I think hash value calculated from the name of class would be appropriate.
You have typeid() to get you a compiler-defined name for your classes.
Regards,
Paul McKenzie
-
July 19th, 2008, 04:49 AM
#3
Re: Can I pass string literal for template parameter?
Why don't you make the struct _hash_ as a function that takes a const char*? And no, you cannot templatize on string literals.
Can you help me with my homework assignment?, Before you post!, Use code tags, How to post!, Codeguru technical FAQs, C++ FAQ Lite, Stroustrup: C++ Style and Technique FAQ, Guru of the Week, Comeau C and C++ FAQs, Comeau C++ Templates FAQs, CUJ @ DDJ, Spam threshold
My Blogs : Learning C++ is fun | Abnegator's reflections
Open Threads : C++ Aha! Moments | Nature of work in C++?
-
July 19th, 2008, 09:27 PM
#4
Re: Can I pass string literal for template parameter?
Code:
template <char const* const psz>
struct _hash_
{
enum {
value = *psz
? (_hash_<psz+1>::value << 2) | *psz
: 0
};
};
Should be :
Code:
template <const char const* psz>
I hope this help.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|