模板参数-具有可变参数的函数指针

尼基塔布莱克

我知道我可以这样做:

template<typename T, typename Ret, typename A1, typename A2, Ret(T::*F)(A1, A2)>
class C{}

但是正如您所看到的A1A2它有点丑陋。实际上我不知道参数的数量。听起来像可变参数模板的工作。不幸的是我不能这样做:

// doesn't work - parameter pack must appear at the end of the template parameter list
template<typename T, typename Ret, typename... Args, Ret(T::*F)(Args...)>
class C{}

也没有:

模板类C;

// doesn't work - wrong syntax
template<typename T, typename F, typename Ret, typename... Args>
class Delegate2<Ret(T::*F)(Args...)>{}

我想要太多吗?

101010

您可以执行以下操作:

template<typename T, T> struct C;

template<typename T, typename R, typename ...Args, R (T::*F)(Args...)>
struct C<R (T::*)(Args...), F> {

  R operator()(T &obj, Args &&... args) {
    return (obj.*F)(std::forward<Args>(args)...);
  }

};

然后在您的程序中:

struct A {
  int foo(int i) { return i; }
};

int main() {
  C<int(A::*)(int), &A::foo> c;
  A a;
  std::cout << c(a, 42) << std::endl;
}

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有可变参数模板参数的函数指针

具有可变参数模板的成员函数指针

C ++:具有可变参数模板的成员函数指针参数

具有指针参数的C ++模板函数

具有可变数量参数的函数的指针

具有可变参数化和类型的C函数指针

具有模板函数名称的可变参数模板

函数指针参数的可变参数模板参数推导

具有模板函数指针参数的调用函数

编写具有可变参数的各种函数的模板

以成员函数指针为参数的可变参数模板

具有指针参数的函数模板重载解析

具有推论参数的模板函数指针数组变量

具有可变参数类型的模板多个可变参数继承

从具有可变参数的模板类继承

具有可变模板类型的DescribeFunction参数

具有通用指针参数的函数指针

从指针映射到具有可变数字参数的函数调用函数

可变参数模板函数确定函数指针的返回类型

具有可变参数类型参数的可变函数

具有多个参数包的可变参数模板构造函数

具有相同类型参数的可变参数模板化函数

具有相同类型的可变参数模板参数的构造函数无法编译

具有相同参数类型的可变参数模板函数

如何传递具有可变参数作为模板参数的成员函数?

带有指向可变参数函数的函数指针的 C++ 模板化类

当具有带有模板参数的函数指针作为模板参数时,“没有匹配的函数调用”

带有可变参数模板参数的重载函数

C ++中没有参数可变参数模板函数