今天上百度知道,偶然看到一个函数模板的限制。
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;
}