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;

}

原文地址:https://www.cnblogs.com/lin1270/p/1503302.html