【问题标题】:How can I verify a class method signature?如何验证类方法签名?
【发布时间】:2020-03-31 09:57:53
【问题描述】:

我可以按如下方式验证函数签名:

template <typename>
struct FnType
{
  static bool const valid = false;
};

struct FnType<void(int)>
{
  static bool const valid = true;
};

void foo(int)
{

}

FnType<decltype(foo)>::valid; //true

如何验证类方法签名?

class Y
{
public:
  void foo(int)
  {

  }
};

FnType<decltype(&Y::foo)>::valid; //false?? 

我想验证Y::foo 返回类型和参数类型是否有效。

【问题讨论】:

    标签: c++ class templates types


    【解决方案1】:

    您可以为成员函数指针添加另一个部分特化。例如

    template <typename T>
    struct FnType<void(T::*)(int)>
    {
      static bool const valid = true;
    };
    

    然后

    FnType<decltype(&Y::foo)>::valid; //true
    

    LIVE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-29
      • 2013-05-15
      • 2012-05-05
      • 2011-11-27
      • 1970-01-01
      • 2015-11-01
      • 2012-09-08
      • 1970-01-01
      相关资源
      最近更新 更多