2014-07-15 54 views
6

, sık sık bu kod tür var: Doxygen ile SFINAE ile etkinleştirilen işlevler nasıl belgelenir? Ben geliştiriyorum Kütüphanede

template<typename T = P, enable_if_c<has_V_field<T>> = detail::dummy> 
constexpr std::size_t v(){ 
    return T::V; 
} 

template<typename T = P, disable_if_c<has_V_field<T>> = detail::dummy> 
constexpr std::size_t v(){ 
    return 1; 
} 

iki işleve

aynı şeyi yapar, ama türüne göre etkindir. O zamanlar sadece bir tanesini belgelemek isterim, ayrıca eğer mümkünse, constexpr std::size_t v() gibi şablonlar olmadan Doxygen'de göstermek isterim. Kullanıcı için, buradaki şablonlar hiç değer vermez.

Doxygen ile bu tür bir şey mümkün mü?

cevap

1

Sen \fn kullanabilirsiniz: http://www.stack.nl/~dimitri/doxygen/manual/commands.html#cmdfn

şey gibi: Sen işlevini koyabilirsiniz

/*! \fn template<typename T> constexpr std::size_t v() 
* \brief A function. 
* \return 1 or T::V. 
*/ 
+0

Denedim ve basitçe v() işlevlerinden birini belgeler ve başka bir adla koyarsam hiçbir şey yapmaz :( –

1

(denenmemiş) bunu gibi bir koşullu bölümünde görmek istiyorum:

#ifdef DOXYGEN_ONLY 

/*! documentation for v. */ 
constexpr std::size_t v(); 

#else // actual implementation with two variants selected via SFINAE 

template<typename T = P, enable_if_c<has_V_field<T>> = detail::dummy> 
constexpr std::size_t v(){ 
    return T::V; 
} 

template<typename T = P, disable_if_c<has_V_field<T>> = detail::dummy> 
constexpr std::size_t v(){ 
    return 1; 
} 

#endif 
Aşağıdaki yapılandırma ayarlarını kullanın ve aşağıdaki yapılandırma ayarlarını kullanın:
İlgili konular