【问题标题】:Get number of arguments in a class member function获取类成员函数中的参数数量
【发布时间】:2020-10-12 06:16:04
【问题描述】:

我正在尝试获取类成员函数中的参数数量。

template <typename R, typename ... Types> 
constexpr std::integral_constant<unsigned, sizeof ...(Types)> 
FuncArgCount(R(*f)(Types ...))
{
    return std::integral_constant<unsigned, sizeof ...(Types)>{};
}

class TestClass
{
public:
   TestClass(){}

   void On_Test(size_t v)
   {}

   void Call()
   {
       std::cout<< FuncArgCount(&TestClass::On_Test)::value;
   }
};

上面的模板实现取自这个线程,在非成员函数Get function parameters count上效果很好

【问题讨论】:

    标签: c++ c++11 templates


    【解决方案1】:

    首先,您必须重载指向成员的指针。指向成员的指针实际上并不是指针,它们是单独的类型,表示类型中的偏移量。

    template <typename R, typename T, typename ... Types> 
    constexpr std::integral_constant<unsigned, sizeof ...(Types)> 
    FuncArgCount(R(T::*)(Types ...))
    {
        return std::integral_constant<unsigned, sizeof ...(Types)>{};
    }
    

    其次,输出行应该使用.,而不是::

     std::cout<< FuncArgCount(&TestClass::On_Test).value;
    

    或者您可以直接从函数返回该值,这是一种更合乎逻辑的方法。

    【讨论】:

      猜你喜欢
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多