2011-02-15 4 views
5

\ copydoc 태그를 사용하여 예제 코드 블록을 재사용하고 싶습니다.코드 예제 재사용을위한 Doxygen copydoc 태그

문제를 설명합니다. 나는 종종 모두가 충분히있을 수있는 기능의 범위를 사용하여 포함하는 컨텍스트에서 함수를 사용하는 방법에 작은 코드 예제에 넣어하고자하는 많은 경우에

/** Aquires resource. */ 
Resource* AquireResource(int id); 

/** Releases resource.*/ 
void ReleaseResource(Resource* res); 

:의 난이 개 문서화 된 기능을 가지고 있다고 가정 해 봅시다

/** Aquires resource. 
* 
* \par Example: 
* \code 
* Resource* res = AquireResource(42); 
* ReleaseResource(res); 
* \endcode 
*/ 
Resource* AquireResource(int id); 

/** Releases resource. 
* 
* \par Example: 
* \code 
* Resource* res = AquireResource(42); 
* ReleaseResource(res); 
* \endcode 
*/ 
void ReleaseResource(Resource* res); 

코드 예는 중복되어 있지만 좋지 않습니다. copydoc을 다음과 같이 사용하고 싶습니다.

/** \page ResourceExampleTag 
* \code 
* Resource* res = AquireResource(42); 
* ReleaseResource(res); 
* \endcode 
*/  

/** Aquires resource. 
* 
* \par Example: 
* \copydoc ResourceExampleTag 
*/ 
Resource* AquireResource(int id); 

/** Releases resource. 
* 
* \par Example: 
* \copydoc ResourceExampleTag 
*/ 
void ReleaseResource(Resource* res); 

즉. 다른 장소에서 재사용되는 코드 예제.

실제로 이것은 제가 얻은 것입니다 만, 나는 복사를 위해 만들고있는 더미 페이지 'ResourceExampleTag'를 숨기는 방법을 알지 못하기 때문에 만족스럽지 않습니다. 그래서 어딘가에서 결과 문서 거기에 완전히 문맥의 일부 코드 페이지입니다. 지금까지 내가 볼 수있는 것은 copydoc에서 참조 할 수 있고 자체적으로 내용을 렌더링하지 않는 태그를 찾는 것입니다. 그러나 그것은 저의 생각의 라인 일뿐입니다. 훨씬 좋은 것들이있을 것입니다.

외부 예제 코드 파일과 함께 \ example 태그를 사용하지 않으려 고합니다.

감사합니다.

답변

4

(... 때로는, 항상) @copydoc 전에 그렇지 않으면이 작동하지 않습니다 @snippet 명령이 인라인 예제를 만들기위한 더 유용 할 수있는 빈 줄이있을 필요가있다 당신이하려는 것처럼. 기본적으로 나는 예제를 사용하는 함수 사용 @snippet의 doxygen이 문서 블록에서 다음 나의 예제 소스 파일, my_examples.cpp

/// [exampleMyFirst] 
void foo(void) 
{ 
    Resource* foo = AquireResource(42); 
    ReleaseResource(foo); 
    foo = nullptr; //Or NULL 
} 
/// [exampleMyFirst] 

/// [exampleTwo] 
void bar(void) 
{ 
    std::cout << "Unrelated to my first example." << std::endl; 
} 
/// [exampleTwo] 

있습니다.

/// Aquires resource. 
/// 
/// @par Example: 
/// @snippet my_examples.cpp exampleMyFirst 
Resource* AquireResource(int id); 

과정의 대답을 마친 후, 난 당신이 외부 파일을 사용하지 않았다 실현 할,하지만 난 질문을 우연히 때문에 내가 여기에 설명 된 일을하려고 ... 그리고, 그것은 수도 누군가에게 유용 해!

+0

사실, 모든 예제에 대해 하나의 외부 파일을 사용할 수 있고 태그를 사용하여 깔끔하게 선택하는 것은 아마도 지금까지 본 것 중 가장 깨끗합니다. 건배. – sharkin

0

나는 동일한 문제가있어서 우아한 해결 방법을 찾지 못했습니다. 당신의 '더미'예를 주제로 연결, 숨겨진 페이지 만들기)

1) 어떤 임의의 페이지에서 새 서브 페이지 링크가

/*! \mainpage My MainPage 
    blah blah blah 
    \subpage Hidden 
    */ 

2

숨겨진라는 : 나는 결국 다음과 함께했다. 페이지 &nbsp;

/*! \page Hidden &nbsp; 
    \subpage MyExample 
    */ 

3) 지금 당신은 당신이 좋아하는 \copydoc MyExample 수있는 곳의 이름을, 그리고 doxygen에 의해 생성 된 HTML의 사용자에게 보이지 않습니다.

class MyClass 
{ 
    public: 
    /** 
    * @class hide_commonstuff 
    * @par Example: 
    * @code 
    * The common example 
    * @endcode 
    */ 

    /** 
    * First function. 
    * 
    * @copydoc hide_commonstuff 
    */ 
    void first(); 

    /** 
    * Second function. 
    * 
    * @copydoc hide_commonstuff 
    */ 
    void second(); 
}; 

을 다음 doxygen이 구성에서 당신은 문서가 hide_commonstuff에서 복사 EXCLUDE_SYMBOLS = hide_*

설정하지만,이 클래스는 클래스 목록에 표시되지 않습니다

+0

죄송합니다. 작동하지 않았습니다. 생성 된 HTML에서 인덱스는 명확하게 페이지 하이라이저 "mainpage"-> " "-> "MyExample"을 명확하게 보여줍니다. – sharkin

10

이 나를 위해 작동합니다.

또한 : 내가 찾은

+2

copydoc 태그 위의 빈 줄에 대한 힌트를 주셔서 감사합니다. – greydet

+0

잘 작동하지만,'@ class' 대신에 메소드 템플릿에 사용할 수있는 다른 태그가있을 수 있습니까? 메소드에'@ class '를 사용하는 것은 다소 의미 상 의심스러워 보입니다. 나는 명백한'@ fn'을 시도했지만 성공하지는 못했다. –