在函数中返回“模板类对象”

时间:2014-08-16 06:16:53

标签: c++ function templates

我有一个像这样的模板类

//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
}

2 个答案:

答案 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,而不是传递给值