我在文件中定义了一个模板类。
点.h 是
#ifndef POINT_H
#define POINT_H
using namespace std;
template <typename T, int size>
class point {
private:
T coordinates[size];
public:
point();
void set_coordinates(const T *);
void get_coordinates(T *);
};
#endif /* POINT_H */
点.c 是
#include "point.h"
template <typename T, int size>
point::point() {
for (int i = 0; i < size; i++)
coordinates[i] = 0;
}
template <typename T, int size>
void point<T, size>::set_coordinates(const T *coordinates) {
for (int i = 0; i < size; i++)
this->coordinates[i] = coordinates[i];
}
template <typename T, int size>
void point<T, size>::get_coordinates(T *coordinates) {
for (int i = 0; i < size; i++)
coordinates[i] = this->coordinates[i];
}
我将此模板用作point<int, 2> p0;
. 但是编译器给出了point<int, 2>
未定义的错误。我对此进行了搜索,发现了两个解决方案 - 1. 使用export
变量。但我读到并非所有编译器都支持它。所以,我不想用那个。2.创建明确的类专业化,如
template <> class point<int> {
...
}
但是没有其他方法可以做到这一点吗?(我的意思是在 C++ 标准容器中,他们可能使用了一些技术来做到这一点。)