首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在函数中返回“模板类对象”

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

Stack Overflow用户
提问于 2014-08-16 06:16:52
回答 2查看 2.7K关注 0票数 0

我有这样一个模板类

代码语言:javascript
运行
复制
//Matrix.h
template <class T = double>
class Matrix
{
    //some constructors variables and ...
};

定义在名为Matrix.h的文件中,如何从其他文件中的该类返回对象,比如assemble.h,类似于:

代码语言:javascript
运行
复制
//assemble.h
#include "Matrix.h"
Matrix<T> assemble(Matrix<T> KG,int node)
{
    //some other codes
}
EN

回答 2

Stack Overflow用户

发布于 2014-08-16 08:08:57

定义在一个名为Matrix.h的文件中的矩阵模板现在我如何从其他文件中从这个类返回一个对象,比如assemble.h

Matrix本身并不是一个类。它是一个模板;将其视为创建类的一种方法,例如Matrix<int>Matrix<std::string>Matrix<double>Matrix<MyClass>

因此,问题是:您希望您的assemble函数与任何矩阵类一起工作,还是希望它能够工作一个特定的矩阵类?

在前一种情况下,您还必须对函数进行临时化(这意味着,与上面发生的情况类似,您不再拥有一个函数而是一个函数创建机制):

代码语言:javascript
运行
复制
template <class ContentType>
Matrix<ContentType> assemble(Matrix<ContentType> KG, int node)
{
    // ...
}

(我在本例中将模板参数命名为ContentType,这样您就可以看到它不必与Matrix中的模板参数同名)。

在后一种情况下,必须指定具体的类:

代码语言:javascript
运行
复制
Matrix<int> assemble(Matrix<int> KG, int node)
{
    // ...
}

顺便说一下,您可能希望通过const引用传递矩阵对象,特别是在没有C++11移动功能的情况下。

票数 2
EN

Stack Overflow用户

发布于 2014-08-16 06:20:46

assemble也需要成为一个模板函数:

代码语言:javascript
运行
复制
template<typename T>
Matrix<T> assemble(Matrix<T> KG,int node)
{
    Matrix<T> m;
    //some other codes
    return m;
}

注:

  • 您应该在一个名称空间中声明它,而不是在全局命名空间中声明它。
  • 考虑将KG作为对const的引用,而不是按值传递。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25337491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档