【问题标题】:How to document functions that are enabled with SFINAE with Doxygen?如何用 Doxygen 记录 SFINAE 启用的功能?
【发布时间】:2014-09-05 16:04:24
【问题描述】:

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

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 可以实现这种功能吗?

【问题讨论】:

    标签: c++ templates doxygen


    【解决方案1】:

    你可以把你想看到的函数放在一个条件部分,像这样:

    #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
    

    【讨论】:

      【解决方案2】:

      您可以使用\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.
       */
      

      【讨论】:

      • 我试过了,它只是记录了一个 v() 函数,如果我把它换成另一个名字,它不会做任何事情:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 2012-08-15
      • 2012-06-05
      • 2017-08-25
      • 2011-07-09
      相关资源
      最近更新 更多