繁体   English   中英

cpp文件的函数模板特化语法

function template specialization syntax for cpp file

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个模板化的函数在我的.h中声明并在我的.cpp中实现:

//file.h
class FileReader{
template <class T> void Read( T *aValue );
};

//file.cpp
template<class T>
void
FileReader::Read( T *aValue )
{
    //implementation
}

为了允许在我的.cpp中实现,我有

template void FileReader::Read<uint8_t>( uint8_t * );
template void FileReader::Read<uint16_t>( uint16_t * );

但是试图修复一个doxygen问题,有人在这里指出我应该使用

template<> void FileReader::Read<uint8_t>( uint8_t * );
template<> void FileReader::Read<uint16_t>( uint16_t * );

这确实解决了doxygen问题,但它在链接时打破了我的编译。

=>在我的.cpp中专门化我的函数模板并允许函数链接的正确语法是什么?

这个问题似乎表明我应该使用我的第二个版本。 但是这个文章使用我的第一个版本。

1 个回复

正确的语法取决于您实际尝试做什么。 添加<>不仅仅是一种修复Doxygen的方法 - 它实质上改变了程序的含义!

以下是显式实例化定义

template void FileReader::Read<uint8_t>( uint8_t * );
template void FileReader::Read<uint16_t>( uint16_t * );

它们告诉编译器在那时和那里实例化函数模板,并为实例化发出符号,以便它们可以由另一个翻译单元链接。 这似乎是你真正想要做的事情。

以下是显式特化声明

template<> void FileReader::Read<uint8_t>( uint8_t * );
template<> void FileReader::Read<uint16_t>( uint16_t * );

它们告诉编译器您将为这些特定模板参数定义自己的模板特化。 因此,任何试图调用FileReader::Read<uint8_t>都不会实例化您已定义的主模板,而是寻找专门的定义。 它看起来并不像你想要做的那样,但如果是这样的话,你实际上必须在某些时候定义这些特化。

3 为什么这个函数模板特化不能编译?

我试图在templatised类中专门化一个templatised函数。 它工作正常,直到我添加专业化:然后它不再编译。 这是我正在尝试做的事情的简化示例: 这是我尝试编译时Visual Studio 2010返回的编译器错误: 我在这做错了什么? (这个问题是从不 ...

4 指针的函数模板特化

在我们的代码库中,我们有一个模板 有一些专业。 一个专业是 当我尝试使用它时,clang 给了我 示例代码是 为什么不能将此模板专门用于指针类型? 我怎样才能达到专业化? ...

5 如何减少函数模板特化?

我正在尝试使用他们的反射系统编写一个在 UE4 中使用的属性验证器。 我首先想到了这个: 我只为 2 种类型实现了 GreaterThan,我想知道我是否不能重构该类以避免如此多的模板专业化。 是否有可能有类似的东西,例如我传递std::greater&lt; _VALUE_TYPE_ &gt ...

6 函数模板特化(在int值上模板)

我使用的是Eigen线性代数软件包,它们在维度上提供模板化的矩阵。 我想要一些可以为我的程序生成测试数据的函数,因此我也尝试在维度上对它们进行模板化,并具有特定的专业知识: 但是,这些东西无法编译。 我得到: 出了什么问题,我该如何解决? ...

7 没有模板化参数的函数模板特化

让我们看一个模板函数,它接受void参数并返回void: 后来我们专门研究这个功能: 问题是为什么这个编译? 我们有三个具有相同签名的函数: void(void) ,我预计它应该打破多个声明? ...

2014-09-09 10:54:36 2 89   c++
8 函数模板显式特化

我正在学习 C++ 模板,我有一个问题。 template&lt;&gt; size_t GetStringSize(const char* s) { return s.strlen(); } template&lt;&gt; size_t GetStringSize(const char* ...

2021-04-06 16:21:25 1 32   c++
10 “模拟”偏函数模板特化?

我知道部分模板特化不适用于函数。 但是有什么方法可以实现类似的目标吗? 我的用例非常简单,但我不确定解决它的最佳方法是什么。 假设我正在编写一个接收 STL 容器的函数: 现在,当std::forward_list和std::list被传std::forward_list ,我想要这个函数的不 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM