首页 > 解决方案 > 如何验证类方法签名?

问题描述

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

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++classtemplatestypes

解决方案


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

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

然后

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

居住


推荐阅读