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

时间:2014-07-15 12:45:17

标签: 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;
}

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

Doxygen可以做到这一点吗?

2 个答案:

答案 0 :(得分:3)

您可以将您想要查看的功能放在条件部分中,如下所示:

#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

然后使用以下配置设置:

ENABLE_PREPROCESSING   = YES
PREDEFINED             = DOXYGEN_ONLY

答案 1 :(得分:1)

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

类似:(未经测试)

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