Проблема с doxygen и шаблонами в файле .tpp - PullRequest
0 голосов
/ 10 декабря 2018

Я начал использовать Doxygen (предварительно скомпилированный 1.8.14) для генерации простой документации кода для моего проекта C ++ в Windows 10.

В заголовочном файле я определяю три шаблонные функции, и мои определения помещаются в a.tpp файл включен в конец заголовочного файла.Глядя на сгенерированный вывод, кажется, что doxygen не читает этот файл. Таким образом, я пришел к выводу, что doxygen не поддерживает это .

The resulting Doxygen output

Однако согласно руководству (http://www.doxygen.nl/manual/starting.html) говорится, что «Любое другое расширение анализируется, как если бы это был файл C / C ++.»функции действительно не реализованы?

IPC.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"

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

1 Ответ

0 голосов
/ 10 декабря 2018

Для дальнейшего использования: добавьте tpp=C++ к EXTENSION_MAPPING (под expert/project в doxywizard) и *.tpp к FILE_PATTERNS (под expert/input в doxywizard).

...