Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

typedef in template class with Doxygen (C++)

Tags:

c++

doxygen

My question is related to how to comment typedef in template class with Doxygen. I will give an example to illustrate my question:

 namespace fundamental
  {
    /**
    * Basic function
    */
    template <typename T>
    class Base
    {
    public:
      T x; ///< x coordinate
      T y; ///< y coordinate
    };
    typedef Base<float> Coordinate; ///< Point coordinate class
  }

After using Doxygen to process the above codes, I can obtain a HTML page to show the definition of the class Base. However, for the typedef class Coordinate, it will not appear in the same page with Base. In fact all the typedef types are listed in the fundamental namespace page along with all the classes in this namespace. I was wondering whether it is possible to show Coordinate class in the Base HTML page. By doing so, the link between Base and Coordinate will become much closer. Thanks!

like image 267
feelfree Avatar asked Aug 07 '12 15:08

feelfree


4 Answers

The typedef is part of a namespace, so you must document the namespace for it to appear, i.e.:

/// documentation for the namespace
namespace fundamental
{
   ...
   typedef Base<float> Coordinate; ///< Point coordinate class
}

Alternatively you could use @relates but it this will put the member under Related Functions of the Base class:

/// @relates Base
/// Point coordinate class
typedef Base<float> Coordinate;

You can change this title to for instance Related Members by creating a layout file using doxygen -l and then editing the two occurrences of the related element in the generated DoxygenLayout.xml as follows:

<related title="Related Members"/>
like image 164
doxygen Avatar answered Oct 22 '22 13:10

doxygen


In the manual I read the following:

Let's repeat that, because it is often overlooked: to document global objects (functions, typedefs, enum, macros, etc), you must document the file in which they are defined. In other words, there must at least be a

/*! \file */ or a /** @file */ line in this file.

like image 44
Joost Sannen Avatar answered Oct 22 '22 12:10

Joost Sannen


There's the See Also (@sa) command, useful for generating cross-references to other entities.

like image 2
Emile Cormier Avatar answered Oct 22 '22 13:10

Emile Cormier


You could also use the /sa command to manually place a reference in Base's page.

namespace fundamental
{
  /**
  * Basic function
  * /sa Coordinate
  */
  template <typename T>
  class Base
  {
  public:
    T x; ///< x coordinate
    T y; ///< y coordinate
  };
  typedef Base<float> Coordinate; ///< Point coordinate class
}
like image 1
Kaiged Avatar answered Oct 22 '22 14:10

Kaiged