C++模板的正确写法

我们写模板传统的写法是这个样子的:

                            1.   把类的整个框架写在 .h 文件中。//注意此文件中要写上 头文件保护符

                            2.   把类中所有接口的实现写在 .cpp 中。

                            3.   在 main() 中创建 女朋友 ,调用女朋友的各种接口。

            比如我自身写的这个模板,运用传统方式写下来如下:

                C++模板的正确写法

          为什么要这样写呢, 因为分开写的话,客户获取接口,却不会知道具体的实现,是闭源来财的好路字和安全的需要。

               我照做了,结果编译器正常运转,而连接器会报错如下:  

                                    main.cpp:(.text+0x10): undefined reference to `BBtree<int>::insert()'

                                    main.cpp:(.text+0x1c): undefined reference to `BBtree<int>::maketree()'

                                    这句报错的意思是:在 .h 文件中找不到此接口的实现


            所以我们得出一个结论:对于c++模板,传统方法是不适用的!!!

            那怎么办?等死?等死是不可能的,这辈子都不可能等死。

            有以下三种方法解决这个问题:

            1. 把模板的定义与声明全部写在 .h 中 //这样做的缺点是编译文件会变得很大,显然要降低编译和链接速度

            2. 显式的实例化类型

            3. 运用 export 关键字 //在c11标准中已经被除名了,改用 extren 关键字防止阻止编译器在某编译单元内实例化特定模板

        第三种因为已经被除名,故不讲。第二种不推荐使用,因为如果一开始就把模板全部都实例化,编写模板就会失去意义。

        所以我们得出一个结论:

                                             ~~~~~~~~选第一种选第一种~~~~~~~

                        ps:c++的类模板大多数都是开源的,所有就不要想着分开写了,非要分,推荐《强迫症康复指南》或者用第三种方法,但已经被c++11抛弃了


                   得出结论后,我们可以分析原因了(分析原因需要几个知识点分别是 链接, 模板实例化等,在我其他的博文中都有所解释)。。。未完待续