如何记录使用Doxygen的SFINAE启用的功能?

Bap*_*cht 8 c++ templates doxygen

在我正在开发的库中,我经常有这样的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

这两个函数执行相同的操作,但是根据类型启用.我想只记录其中一个,而且,如果可能的话,我希望在Doxygen中显示它而没有模板的东西,如constexpr std::size_t v().对于用户来说,这里的模板根本没有价值.

Doxygen可以做到这一点吗?

dox*_*gen 5

您可以将您希望看到的函数放在条件部分中,如下所示:

#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
Run Code Online (Sandbox Code Playgroud)

然后使用以下配置设置:

ENABLE_PREPROCESSING   = YES
PREDEFINED             = DOXYGEN_ONLY
Run Code Online (Sandbox Code Playgroud)


Jar*_*d42 1

您可以使用\fn: http: //www.doxygen.nl/manual/commands.html#cmdfn

像这样的东西:(未经测试)

/*! \fn template<typename T> constexpr std::size_t v()
 *  \brief A function.
 *  \return 1 or T::V.
 */
Run Code Online (Sandbox Code Playgroud)