Hi, all! I think we've reached the limitation of C++ template! The code your guys written is really complex, but is that worth so 'complex'? or, say, do we must code the general functions in such complex way?
We can invent a new style general programming language, it may be a preprocess language, or something mixed, like 'Perl'. Then a compiler can translate that language to C/C++ (well, I can prove that). I have some ideas: 1) e.g. vc++ 6 has a C4786 warning, it is a potential error when compiling a complex template, #pragma warn(disable:4786) isn't an ideal solution. The only way is preprocess the code to generate instantiated template functions or classes, like this: template<class t> t max_a_reallyloooo~~ooongname(const t, const t); after instantiated: int max_a_reallyloooo~~ooongname_int(int, int); int max_a_reallyloooo~~ooongname_float(float, float); then, the preprocessor found this name is too long, so it can rename that to: int max_a_re5783985(int, int); int max_a_re5782745(float, float); 2) A more smart data layout structure. I found many library do not implement the basic data type very well. we can write a counted string as this: struct counted_string { int nLength; char the_first_char[1]; }; then allocate a string as counted_string *hello = (counted_string *)(new BYTE[12+sizeof(counted_string)]; strcpy(hello->the_first_char, "hello,world!"); yes, we still can do whatever, if we'd please to write lots of complex code. But in this example, unless we change "char the_first_char[]" to a pointer as "char *pStr", which will waste 4 bytes more(not all examples waste only 4-bytes), I really can't find a better way. We can use template, like: template<int n> { struct counted_string { int nLength; char the_content[n]; }; }; but do you agree that "a 3-chars long string is of a different type from 4-chars long string"? 3) The most important in my personal opinions, which is about the runtime architecture. Because template is a compile-time idea, when it is running, e.g. an instantiated template-struct has no information about its type. we must provide a runtime type information, so some other stand-alone programs can know what data is transfered in. The variant, which always have a type-id at the beginning of binary data, won't face such problem. We still can use C++ RTTI or by some static members, to make something has type info, but it is not a "very good" way. In fact, I was designing something like 'boost::variant', but I found I can't design it well, anyway. I think, we've reached the limit of C++ template! /zauj. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost