gpt4 book ai didi

Doxygen 用于 C++ 模板类成员特化

转载 作者:行者123 更新时间:2023-12-03 20:46:47 25 4
gpt4 key购买 nike

当我编写类模板,并且需要完全特化这些类的成员时,Doxygen 不识别特化——它只记录通用定义,或者(如果只有特化)最后的定义。这是一个简单的例子:

===MyClass.hpp===

#ifndef MYCLASS_HPP
#define MYCLASS_HPP

template<class T> class MyClass{
public:
static void foo();
static const int INT_CONST;
static const T TTYPE_CONST;
};

/* generic definitions */
template<class T>
void MyClass<T>::foo(){
printf("Generic foo\n");
}

template<class T>
const int MyClass<T>::INT_CONST = 5;

/* specialization declarations */
template<> void MyClass<double>::foo();
template<> const int MyClass<double>::INT_CONST;
template<> const double MyClass<double>::TTYPE_CONST;
template<> const char MyClass<char>::TTYPE_CONST;

#endif

=== MyClass.cpp ===
#include "MyClass.hpp"

/* specialization definitions */
template<>
void MyClass<double>::foo(){
printf("Specialized double foo\n");
}

template<> const int MyClass<double>::INT_CONST = 10;

template<> const double MyClass<double>::TTYPE_CONST = 3.141;
template<> const char MyClass<char>::TTYPE_CONST = 'a';

因此,在这种情况下,foo() 将被记录为打印“通用 foo”,INT_CONST 将被记录为设置为 5,没有提及特化,并且 TTYPE_CONST 将被记录为设置为“a”,没有提及3.141 并且没有迹象表明“a”是一个特例。

我需要能够记录特化 - 无论是在 MyClass<T> 的文档中,或在新页面上 MyClass<double> , MyClass<char> .我该怎么做呢? Doxygen 甚至可以处理这个吗?我是否可能在声明/代码结构中做错了什么,使 Doxygen 无法理解我想要什么?

我应该注意两个相关的案例:

A)对于模板化函数,特化工作正常,例如:
/* functions that are global/in a namespace */
template<class T> void foo(){ printf("Generic foo\n"); }
template<> void foo<double>(){ printf("Specialized double foo\n"); }

这将记录 foo<T>()foo<double>() .

B) 如果我重新声明整个模板,即 template<> class MyClass<double>{...}; ,然后 MyClass<double>将获得自己的文档页面,作为一个单独的类。但这意味着实际上声明了一个全新的类 - MyClass<T> 之间没有关系和 MyClass<double>如果 MyClass<double>本身被声明。所以我必须重新声明类及其所有成员,并重复所有类成员的定义,专门用于 MyClass<double> ,所有这些都是为了让他们看起来好像在使用相同的模板。非常尴尬,感觉就像一个杂乱无章的解决方案。

建议?非常感谢 :)

--齐夫

最佳答案

进一步查找表明此问题是an open bug ,在 Doxygen 1.8.10 中修复。

关于Doxygen 用于 C++ 模板类成员特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2506348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com