我有一个像这样的模板类
//Matrix.h
template <class T = double>
class Matrix
{
//some constructors variables and ...
};
在名为 Matrix.h 的文件中定义,现在如何在其他文件中返回此类中的对象,如 assemble.h 之类的内容:
//assemble.h
#include "Matrix.h"
Matrix<T> assemble(Matrix<T> KG,int node)
{
//some other codes
}
答案 0 :(得分:2)
[Matrix template]在一个名为Matrix.h的文件中定义,我现在该怎么办 在其他文件中返回此类的对象,例如assemble.h
Matrix
本身不是一个类。它是一个模板;将其视为创建类的一种方法,例如Matrix<int>
,Matrix<std::string>
,Matrix<double>
或Matrix<MyClass>
。
因此,问题是:您希望assemble
函数与任何矩阵类一起使用,还是希望它能够使用特定的矩阵类? ?
在前一种情况下,你必须对函数进行模板处理(这意味着,与上面发生的情况类似,你不再有函数而是函数创建机制):
template <class ContentType>
Matrix<ContentType> assemble(Matrix<ContentType> KG, int node)
{
// ...
}
(我已在此示例中命名了模板参数ContentType
,以便您可以看到它不必与Matrix
中的模板参数同名。)< / p>
在后一种情况下,您必须指定具体类:
Matrix<int> assemble(Matrix<int> KG, int node)
{
// ...
}
顺便说一句,您可能希望通过const引用传递矩阵对象,尤其是在没有C ++ 11移动功能的情况下。
答案 1 :(得分:1)
assemble
也需要成为模板函数:
template<typename T>
Matrix<T> assemble(Matrix<T> KG,int node)
{
Matrix<T> m;
//some other codes
return m;
}
注意:强>
KG
作为引用传递给const,而不是传递给值