C++ 使用c+;中其他文件中声明的模板+;
可能重复:C++ 使用c+;中其他文件中声明的模板+;,c++,templates,C++,Templates,可能重复: 我在一个文件中定义了一个模板类 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_coordinat
我在一个文件中定义了一个模板类 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++标准容器中,他们可能使用了一些技术来完成这一任务)。 < p>阅读下面的两个常见问题—— 阅读下面的两个常见问题: < p> C++标准容器的解决方案是将所有的东西放在头文件中。 < p> C++标准容器的解决方案是将所有的东西放在头文件中。 你应该把所有定义都属于模板。
point
(即,包括成员函数)添加到point.h
文件中,并将其包含在使用point
类的任何文件中,以便编译器可以根据需要实例化它。有关详细信息,请参阅
< > C++编译器和链接器有办法避免链接上的“多定义”错误(标准中的ODR规则必须是这样的)。 < P>您应该把所有定义都属于模板<代码>点<代码>(即,包括成员函数)指向
point.h
文件,并将其包含在使用point
类的任何文件中,以便编译器可以根据需要实例化它。有关详细信息,请参阅
< > C++编译器和链接器有办法避免链接上的“多定义”错误(标准中的ODR规则必须是这种情况)。
#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];
}
template <> class point<int> {
...
}