Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Guess what I found in MFC's source code?

Guess what I found in MFC's source code?

Scheduled Pinned Locked Moved The Lounge
c++question
75 Posts 25 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Maxwell Chen

    So you mean that there would be the header <vector> and the implementation, vector.cxx, in gcc or others!? Maxwell Chen

    T Offline
    T Offline
    toxcct
    wrote on last edited by
    #59

    i don't say it's what they do, i say, they should


    TOXCCT >>> GEII power

    1 Reply Last reply
    0
    • J jan larsen

      Here is what I found simply by Googling: http://www.comeaucomputing.com/techtalk/templates/#whylinkerror[^] A little snippet:

      Why do I get a link error when compiling my templates?
      Some compilers require that all function templates need to be made available in every translation
      unit that it is used in. In effect, for those compilers, the bodies of template functions must be
      made available in a header file. To repeat: that means those compilers won't allow them to be
      defined in non-header files such as .cpp files. Furthermore, some compilers also require that
      some functions be defined inline inside a class, and not outside of one.
      Note that not all compilers require this. For instance, Comeau C++ does not in all cases (check
      out http://www.comeaucomputing.com/4.0/docs/userman/ati.html for details on our current setup).
      In short, Comeau C++ supports many models, including one which comes close to what the export
      keyword's intentions are (as an extension).

      And on this point, note that the C++ export keyword is intended to alleviate the original
      question. However, currently Comeau C++ is the only compiler known to support export. Therefore,
      some compilers use such extensions referred to in the previous paragraph, or you need to put the
      bodies of your functions in headers, if you are using a compiler which does not support export.

      So, the ability to put template implementations in the cpp file may be standard, I don't know, and you can't deduce it from reading "The C++ language", because Stroustrup is NOT responsible for that C++ standard, he is not Linus you know ;) But since very few compilers, and apparently none of the most used, are able to do it, you should just avoid trying. "After all it's just text at the end of the day. - Colin Davies "For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus

      T Offline
      T Offline
      toxcct
      wrote on last edited by
      #60

      jan larsen wrote: Stroustrup is NOT responsible for that C++ standard, he is not Linus you know ahahah. so you mean Linus Torvald is instead ? mouaahhhahah export is defined in the C++ standard, whatever you think, and it's sad to see those compilers not to implement it. :(


      TOXCCT >>> GEII power

      J 1 Reply Last reply
      0
      • T toxcct

        jan larsen wrote: Stroustrup is NOT responsible for that C++ standard, he is not Linus you know ahahah. so you mean Linus Torvald is instead ? mouaahhhahah export is defined in the C++ standard, whatever you think, and it's sad to see those compilers not to implement it. :(


        TOXCCT >>> GEII power

        J Offline
        J Offline
        jan larsen
        wrote on last edited by
        #61

        toxcct wrote: ahahah. so you mean Linus Torvald is instead ? mouaahhhahah No, what I meant was that unlike Linus, Bjarne has let go of his invention and given the full control to the implementors. toxcct wrote: export is defined in the C++ standard, whatever you think, and it's sad to see those compilers not to implement it. I agree, but since it doesn't help to moan about it, it's better to just accept that you probably have to wait a few more years before using that feature. "After all it's just text at the end of the day. - Colin Davies "For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus

        1 Reply Last reply
        0
        • T toxcct

          NOOOOOO i'm not talking about that :( i say that if one day, you have to rewrite your code, or just maintain it, it would be much better if you could understand what you wrote back ?! isn't it ??? :confused:


          TOXCCT >>> GEII power

          M Offline
          M Offline
          Maxwell Chen
          wrote on last edited by
          #62

          Elegant way using goto is acceptable, just don't use goto in too queer way that nobody understands the code. As in the following program (ref: The Spigot Algorithm[^]), there's no goto used in it, but still hard to read the code, even though just some for loops:

          long a=10000,b,c=2800,d,e,f[2801],g;
          int main() {
          for(;b-c ; ) f[++b]=a/5;
          for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
          for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
          }

          Maxwell Chen

          T 2 Replies Last reply
          0
          • J jan larsen

            Here is what I found simply by Googling: http://www.comeaucomputing.com/techtalk/templates/#whylinkerror[^] A little snippet:

            Why do I get a link error when compiling my templates?
            Some compilers require that all function templates need to be made available in every translation
            unit that it is used in. In effect, for those compilers, the bodies of template functions must be
            made available in a header file. To repeat: that means those compilers won't allow them to be
            defined in non-header files such as .cpp files. Furthermore, some compilers also require that
            some functions be defined inline inside a class, and not outside of one.
            Note that not all compilers require this. For instance, Comeau C++ does not in all cases (check
            out http://www.comeaucomputing.com/4.0/docs/userman/ati.html for details on our current setup).
            In short, Comeau C++ supports many models, including one which comes close to what the export
            keyword's intentions are (as an extension).

            And on this point, note that the C++ export keyword is intended to alleviate the original
            question. However, currently Comeau C++ is the only compiler known to support export. Therefore,
            some compilers use such extensions referred to in the previous paragraph, or you need to put the
            bodies of your functions in headers, if you are using a compiler which does not support export.

            So, the ability to put template implementations in the cpp file may be standard, I don't know, and you can't deduce it from reading "The C++ language", because Stroustrup is NOT responsible for that C++ standard, he is not Linus you know ;) But since very few compilers, and apparently none of the most used, are able to do it, you should just avoid trying. "After all it's just text at the end of the day. - Colin Davies "For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus

            M Offline
            M Offline
            Maxwell Chen
            wrote on last edited by
            #63

            I am not sure if I remembered correctly ... In some situation, a function template needs to be instantiated when across compilation units... If wrong, just forget it... ;P Maxwell Chen

            1 Reply Last reply
            0
            • M Maxwell Chen

              Elegant way using goto is acceptable, just don't use goto in too queer way that nobody understands the code. As in the following program (ref: The Spigot Algorithm[^]), there's no goto used in it, but still hard to read the code, even though just some for loops:

              long a=10000,b,c=2800,d,e,f[2801],g;
              int main() {
              for(;b-c ; ) f[++b]=a/5;
              for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
              for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
              }

              Maxwell Chen

              T Offline
              T Offline
              toxcct
              wrote on last edited by
              #64

              i did never say that "elegant" was without gotos. of course that code is awful ! grrrrrrrr


              TOXCCT >>> GEII power

              1 Reply Last reply
              0
              • M Maxwell Chen

                Elegant way using goto is acceptable, just don't use goto in too queer way that nobody understands the code. As in the following program (ref: The Spigot Algorithm[^]), there's no goto used in it, but still hard to read the code, even though just some for loops:

                long a=10000,b,c=2800,d,e,f[2801],g;
                int main() {
                for(;b-c ; ) f[++b]=a/5;
                for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
                for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
                }

                Maxwell Chen

                T Offline
                T Offline
                toxcct
                wrote on last edited by
                #65

                ......... and you dare show us that....! :laugh::wtf::doh:


                TOXCCT >>> GEII power

                M 1 Reply Last reply
                0
                • T toxcct

                  ......... and you dare show us that....! :laugh::wtf::doh:


                  TOXCCT >>> GEII power

                  M Offline
                  M Offline
                  Maxwell Chen
                  wrote on last edited by
                  #66

                  Ha ha... ;P That is a famous algorithm that computes pi, with merely 150 characters in a small C program. :cool: Maxwell Chen

                  T 1 Reply Last reply
                  0
                  • M Maxwell Chen

                    Ha ha... ;P That is a famous algorithm that computes pi, with merely 150 characters in a small C program. :cool: Maxwell Chen

                    T Offline
                    T Offline
                    toxcct
                    wrote on last edited by
                    #67

                    and so powerful and useful mean beautiful for you ? :cool:


                    TOXCCT >>> GEII power

                    M 2 Replies Last reply
                    0
                    • T toxcct

                      and so powerful and useful mean beautiful for you ? :cool:


                      TOXCCT >>> GEII power

                      M Offline
                      M Offline
                      Maxwell Chen
                      wrote on last edited by
                      #68

                      toxcct wrote: and so powerful and useful mean beautiful for you ? No, I don't understand the code either! :doh: X| ;P Maxwell Chen

                      1 Reply Last reply
                      0
                      • T toxcct

                        and so powerful and useful mean beautiful for you ? :cool:


                        TOXCCT >>> GEII power

                        M Offline
                        M Offline
                        Maxwell Chen
                        wrote on last edited by
                        #69

                        From your bio: but in C/C++ (my favorites) since 1998. Hey, I started studying C++ since Nov 1998! :-D Maxwell Chen

                        T 1 Reply Last reply
                        0
                        • M Maxwell Chen

                          From your bio: but in C/C++ (my favorites) since 1998. Hey, I started studying C++ since Nov 1998! :-D Maxwell Chen

                          T Offline
                          T Offline
                          toxcct
                          wrote on last edited by
                          #70

                          well, what should i answer that ?! eheh welcome on board :-D


                          TOXCCT >>> GEII power

                          M 1 Reply Last reply
                          0
                          • T toxcct

                            well, what should i answer that ?! eheh welcome on board :-D


                            TOXCCT >>> GEII power

                            M Offline
                            M Offline
                            Maxwell Chen
                            wrote on last edited by
                            #71

                            Since we both started C++ programming after the ISO C++ Standard has come out, how do you consider the ISO standard? Five years more passed and I've been working for three companies (this is my 3rd job now), all those of my colleagues (including ex-colleagues) who started programming C/C++ since Windows 3.1 / DOS era, don't care about ISO/IEC 14882 at all. They think VC++ 6 just fine, and even don't know what the C++ Standard is! :( Maxwell Chen

                            T 1 Reply Last reply
                            0
                            • M Maxwell Chen

                              Since we both started C++ programming after the ISO C++ Standard has come out, how do you consider the ISO standard? Five years more passed and I've been working for three companies (this is my 3rd job now), all those of my colleagues (including ex-colleagues) who started programming C/C++ since Windows 3.1 / DOS era, don't care about ISO/IEC 14882 at all. They think VC++ 6 just fine, and even don't know what the C++ Standard is! :( Maxwell Chen

                              T Offline
                              T Offline
                              toxcct
                              wrote on last edited by
                              #72

                              well, i think everybody should program as much standard as possible, but in the other side, standard don't resolve everything. For my part, i've certainly an "Update" of myself to do for the last rules ISO C++ has defined to be the new C++ standard, but i'm still quite ok when a see some people talking about C++ as the knew everything... but in fact, they don't know anything at all. Visual studio is not a standard ! people think that, as it is microsoft, it is, or it wille become, but the world don't go round around microsoft. thus, i was astonished seeing how many C++ keyword VC++ didn't take part of its own. it's their policy, i don't care, but i'm not glad of it...


                              TOXCCT >>> GEII power

                              1 Reply Last reply
                              0
                              • T toxcct

                                heinnnnn ??? where have you read that ? can you prove this ? header are not for implementation code. we usually put inside them the declarations, the constants sometimes, the prototypes, but no executable code. i'm waiting for your response with interest !


                                TOXCCT >>> GEII power

                                A Offline
                                A Offline
                                Alvaro Mendez
                                wrote on last edited by
                                #73

                                It's just like Nenad told you: For template classes the declaration and implementation need to be visible to the compiler so that it can properly generate the code for the concrete types. So if you put template method implementation inside a cpp file, the compiler will not be able to generate the proper code for each template type declared. Now again, Microsoft's compiler may be more flexible about this rule but it's not the case for more traditional C++ compilers. Regards, Alvaro


                                Give a man a fish, he owes you one fish. Teach a man to fish, you give up your monopoly on fisheries.

                                T 1 Reply Last reply
                                0
                                • A Alvaro Mendez

                                  It's just like Nenad told you: For template classes the declaration and implementation need to be visible to the compiler so that it can properly generate the code for the concrete types. So if you put template method implementation inside a cpp file, the compiler will not be able to generate the proper code for each template type declared. Now again, Microsoft's compiler may be more flexible about this rule but it's not the case for more traditional C++ compilers. Regards, Alvaro


                                  Give a man a fish, he owes you one fish. Teach a man to fish, you give up your monopoly on fisheries.

                                  T Offline
                                  T Offline
                                  toxcct
                                  wrote on last edited by
                                  #74

                                  hey man, you arrive the whole day late ! read THIS[^] and the posts below before says so...


                                  TOXCCT >>> GEII power

                                  1 Reply Last reply
                                  0
                                  • T toxcct

                                    but do you write it explicitely ??? i don't think so ! that comes in the assembly code ! in C/C++, we use many powerful loop that we don't have to use gotos in the code, except of poor few exceptions...


                                    TOXCCT >>> GEII power

                                    P Offline
                                    P Offline
                                    peterchen
                                    wrote on last edited by
                                    #75

                                    The point of my post being: you can create bad code with other language constructs as well. (I even forgot the most prominent ones: switch, break, continue) It is harder to implement reuse by spaghetti jumps without goto's, but still fairly simple to write badly structured code. (did you ever use a fall through without a //fallthrough comment? gotcha!) Neither C nor C++ are languages that are designed to keep you safe and warm. Once you're out of university, you are on your own, in a cold and barren landscape. But if you've seen the desert, cold and barren can hold a beauty that fills your heart with an eternal passion.


                                    Flirt harder, I'm a Coder
                                    mlog || Agile Programming | doxygen

                                    1 Reply Last reply
                                    0
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular
                                    • World
                                    • Users
                                    • Groups