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

Reply via email to