• C++函数模板的限制


    今天上百度知道,偶然看到一个函数模板的限制。

    1、浮点数不能作为 非类型模板参数 如:template <float /* or double */> class TT;

    2、自定义类不能作为模板参数,这些自定义类也是 非类型模板参数。

    // 6-14-2009

    #include <iostream>
    using namespace std;

    // #define FLOAT
    // #define TEMPLATE_OBJECT
     #define COMMON_OBJECT

    #ifdef FLOAT
    template <float f>
    class TT;
    #endif

    #ifdef TEMPLATE_OBJECT
    template < class T >
    class TM {};

    template < TM<int> c >
    class TT;
    #endif

    #ifdef COMMON_OBJECT
    class TN{};
    template < TN c >
    class TT;
    #endif

    几乎忘得差不多了。

    C++模板还有一个限制,而且相当重要:

    模板类或模板函数的声明与定义必须位于同一个文件中!除非新一代的编译器支持关键字export.

    如果编译器不支持export关键字,但我们又想把声明与定义分开写,那该如何操作呢?方法如下:

    把模板声明写在.h中,模板定义写在.cpp中,需要注意的是,我们并不像一般的文件包含那样,在.cpp中包含.h,而是在main.cpp中,把这两个东东包含进来如:

    // test.h

    template <typename T>

    class Test

    {

    public:

        void print();

    };

    // test.cpp

    template <typename T>

    void Test<T>::print()

    {

    cout << "Successfully!" << endl;

    }

    // main.cpp

    #include <iostream>

    using namespace std;

    #include "test.h"

    #include "test.cpp"

    int main()

    {

    Test<int> t;

    t.print();

    return 0;

    }

  • 相关阅读:
    堆内存内部结构
    JVM 总体结构
    HTTP的工作原理
    HTTP协议简介
    服务器硬件资源_I/O
    maven常用命令行总结
    java enum—枚举的应用
    JAVA闰年的判断
    JAVA数据结构与算法——求最大公约数!!
    ThinkPHP 分页
  • 原文地址:https://www.cnblogs.com/lin1270/p/1503302.html
Copyright © 2020-2023  润新知