.tpp文件中的doxygen和模板存在问题 我已经开始使用doxEngy(预编译1.8到14)来为Windows 10上的C++项目生成简单的代码文档。p>

.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

在头文件中,我定义了三个模板化函数,并且我的定义放在头文件末尾包含的.tpp文件中。查看生成的输出,doxygen似乎没有读取此文件。因此,我得出结论,doxygen不支持这一点

然而,根据手册()它说“任何其他扩展都像解析C/C++文件一样进行解析。”这类功能真的没有实现吗

IPC.hpp(样本)

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;
}