正确使用函数的显式模板实例化?
Posted
技术标签:
【中文标题】正确使用函数的显式模板实例化?【英文标题】:Correct use of explicit template instantiation for functions? 【发布时间】:2020-11-21 15:56:46 【问题描述】:我目前正在进行一项练习,我应该在我的所有函数中使用模板矩阵作为参数,并在标题中强制使用所需的数据类型。我真的不知道该怎么做。 有一个带有以下函数的标题和一个具有相同语法的第二个函数(如果相关,还有相同的模板名称?):
template <typename multityp> void matsum( multityp **, multityp **, multityp **, int, int );
template void matsum <int> (int**, int**, int**, int, int);
template void matsum <double> (double**, double**, double**, int, int);
template void matsum <bool> (bool**, bool**, bool**, int, int);
编译时,我在以下函数中收到错误“变量或字段'matsum'声明无效”,用于“multityp”,我将其放置在另一个标头中,然后出现多个“变量未声明”错误:
void matsum ( multityp **matrix1, multityp **matrix2, multityp **ergebnis, int zeilen, int spalten )
//Does stuff
【问题讨论】:
你能提供一个完整的可重现的例子吗?仅从那些代码sn-ps很难找到问题。 看这个答案,可能是multityp
没有声明:***.com/questions/364209/…。鉴于上面如何使用multityp
,您是否在void matsum
之前缺少template <typename multityp>
?
@DanielLangr 这实际上是该函数的所有代码,所有其他代码都与在结构上与该函数完全相同的其他函数相关。唯一要添加的是带有#ifndef [...] 的标头的守护者,因此将其键入.hpp 并编译应该会给出提供的错误。
@parktomatomi 好吧,现在我觉得有点愚蠢......我并没有真正想到 template <typename multityp>
作为函数头的一部分,所以我把它留给定义身体。现在可以了!
【参考方案1】:
根据parktomatomi的评论添加
template <typename multityp>
在 body 声明前面做了诀窍:
template <typename multityp> void matsum ( multityp **matrix1, multityp **matrix2, multityp **ergebnis, int zeilen, int spalten )
//Does stuff
【讨论】:
以上是关于正确使用函数的显式模板实例化?的主要内容,如果未能解决你的问题,请参考以下文章