将未定义的参数计数作为模板参数的函数指针

Function pointer with undefined parameter count as template argument

本文关键字:参数 函数 指针 未定义      更新时间:2023-10-16

我正在寻找一种方法来传递具有未定义参数计数和类型作为模板参数的函数指针。

在我的研究中,我已经发现了这个

STC<void (*)()> s(foo2, fp); // like this

因此,通常似乎可以将函数指针作为模板参数传递。我现在的问题是是否有可能做这样的事情

STC<void (*)(T&&... t)> s(foo2, fp);

附加信息:我想传递函数指针的类应该只保存数组中的函数列表,没有其他函数。

如果我理解正确,您正在寻找部分专业化。

我的意思是类似的东西(感谢 Jarod42 的改进(

template <typename>
struct foo;
template <typename ... Ts>
struct foo<void(*)(Ts ...)>
 { void(*ptr)(Ts ...); };

但请注意,模板参数不是函数指针;而是函数指针的类型。

以下是完整的工作示例

#include <iostream>
template <typename>
struct foo;
template <typename ... Ts>
struct foo<void(*)(Ts ...)>
 { void(*ptr)(Ts ...); };
void func1 ()
 { std::cout << "func1" << std::endl; }
void func2 (int, long)
 { std::cout << "func2" << std::endl; }

int main ()
 {
   foo<decltype(&func1)>  f1 { &func1 };
   foo<decltype(&func2)>  f2 { &func2 };
   f1.ptr();
   f2.ptr(1, 2L);
 }