0

模板可以采用非类型函数指针参数,但如果所有可能的函数指针参数都被接受,就会出现问题,例如:

void dummy()
{
}

template <typename FT, FT* fp>
void proxy()
{
  fp();
}

int main()
{
  proxy<decltype(dummy), &dummy>();

  return 0;
}

如您所见,这非常麻烦。是否存在一种更方便的方法来提供“通配符”函数指针作为非类型模板参数?

4

3 回答 3

1

对于您的特定问题,更好的解决方案是仅将函数类型作为模板参数,将项目作为普通函数参数。您还可以使用类型推导,而不是显式指定使用哪些参数类型:

void dummy()
{
}

template <typename FT>
void proxy(FT fp)
{
  fp();
}

int main()
{
  proxy(fp);

  return 0;
}
于 2013-11-08T11:07:26.160 回答
0

如果你知道你想调用的函数的签名(你肯定知道),你不能吗

template<void F()>
void proxy()
{
    F();
}

void dummy() {}

int main()
{
    proxy<dummy>();
}
于 2013-11-08T11:11:01.750 回答
0

从 c++17 开始,我们现在有了这个

void dummy() { }

template <auto fp>
void proxy()
{
  fp();
}

int main()
{
  proxy<dummy>();

  return 0;
}

您可能还想查看requires关键字。

于 2022-01-25T11:51:43.343 回答