我有这样一个模板类
//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
}发布于 2014-08-16 08:08:57
定义在一个名为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中的模板参数同名)。
在后一种情况下,必须指定具体的类:
Matrix<int> assemble(Matrix<int> KG, int node)
{
    // ...
}顺便说一下,您可能希望通过const引用传递矩阵对象,特别是在没有C++11移动功能的情况下。
发布于 2014-08-16 06:20:46
assemble也需要成为一个模板函数:
template<typename T>
Matrix<T> assemble(Matrix<T> KG,int node)
{
    Matrix<T> m;
    //some other codes
    return m;
}注:
KG作为对const的引用,而不是按值传递。https://stackoverflow.com/questions/25337491
复制相似问题