.tpp文件中的doxygen和模板存在问题 我已经开始使用doxEngy(预编译1.8到14)来为Windows 10上的C++项目生成简单的代码文档。p>
在头文件中,我定义了三个模板化函数,并且我的定义放在头文件末尾包含的.tpp文件中。查看生成的输出,doxygen似乎没有读取此文件。因此,我得出结论,doxygen不支持这一点 然而,根据手册()它说“任何其他扩展都像解析C/C++文件一样进行解析。”这类功能真的没有实现吗 IPC.hpp(样本).tpp文件中的doxygen和模板存在问题 我已经开始使用doxEngy(预编译1.8到14)来为Windows 10上的C++项目生成简单的代码文档。p>,c++,templates,doxygen,C++,Templates,Doxygen,在头文件中,我定义了三个模板化函数,并且我的定义放在头文件末尾包含的.tpp文件中。查看生成的输出,doxygen似乎没有读取此文件。因此,我得出结论,doxygen不支持这一点 然而,根据手册()它说“任何其他扩展都像解析C/C++文件一样进行解析。”这类功能真的没有实现吗 IPC.hpp(样本) IPC类{ 公众: 模板 布尔设置数据(标准::矢量数据,偏移量); 模板 std::数组getData(偏移量); 模板 bool getData(标准::数组和数据,偏移量); bool ge
IPC类{
公众:
模板
布尔设置数据(标准::矢量数据,偏移量);
模板
std::数组getData(偏移量);
模板
bool getData(标准::数组和数据,偏移量);
bool getTrigger(偏移选择器,长超时\u ms=0);
无效设置触发器(偏移选择器,状态打开);
};
#包括“IPC.tpp”
IPC.tpp(样本)
#pragma一次
/*! 写入共享内存对象。
\param data提供将要写入的数据。
\param offset给出从文件开始的字节偏移量。
\返回布尔值:完成时为真
\sa getData()
*/
模板
bool IPC::setData(标准::矢量数据,偏移量){
//根据类型和编号计算内存块大小
无符号整数块_size=sizeof(T)*N;
//安全检查
如果(块大小+偏移量>大小){
std::cerr供将来参考:将tpp=C++
添加到扩展映射中(在doxywizard中的expert/project
下)和*.tpp
添加到文件模式中(在doxywizard中的expert/input
下).上述句子可能不再准确。您是否将tpp
扩展名添加到FILE\u PATTERNS
?还使用extension\u mapping设置tpp
的映射@albert我使用了doxywizard GUI,该设置在Doxyfile中吗?这些是Doxyfile中的设置,但可以在dox中访问ywizard以及expert
选项卡和子项input
和project
@albert中都是这样做的!更好的描述将出现在1.8.15版本的文档中。抱歉,这对我来说还不起作用。我在依赖关系图中有几个标题,出于某种原因显示为绝对路径-输入没有什么不同——但当x.tpp存在时,这通常发生在x.hpp上。(我立即找到了一个反例,但至少是一种趋势。)两个文件名都不是依赖关系图中的链接,也不在参考的链接包含部分中,并且在图中甚至没有显示从x.tpp到x.hpp的依赖关系。有什么想法吗?谢谢!
class IPC {
public:
template <class T, int N>
bool setData(std::vector<T> data, Offsets offset);
template <class T, int N>
std::array<T, N> getData(Offsets offset);
template <class T, int N>
bool getData(std::array<T, N> &data, Offsets offset);
bool getTrigger(Offsets selector, long timeout_ms = 0);
void setTrigger(Offsets selector, Status on);
};
#include "IPC.tpp"
#pragma once
/*! Writes to the shared memory object.
\param data gives the data that will be written.
\param offset gives the byte offset from the start of the file.
\return bool: true on completion
\sa getData()
*/
template <class T, int N>
bool IPC::setData(std::vector<T> data, Offsets offset) {
//Calculate the memory block size from the type and number
unsigned int block_size = sizeof(T) * N;
//Safety check
if (block_size + offset > _size) {
std::cerr << "Error at IPC::setData(): Block size is bigger than memory block size" << std::endl;
return false;
}
if (data.size() < N) {
std::cerr << "Error at IPC::setData(): Data array is smaller than N" << std::endl;
return false;
}
//Create mapped_region
mapped_region region(_shm, read_write, offset, block_size);
for (int i = 0; i < N; i++) {
std::memcpy((char* ) region.get_address() + sizeof(T) * i, &(data.at(i)), sizeof(T));
}
return true;
}