我可以从(旧式)函数签名中获取参数包吗?

我想声明一个方法 - 可变参数 - 它的签名来自作为模板参数的“旧式”函数签名。

您可以std::function使用函数签名声明,例如,

std::function<int(float,float)> f;

现在我想要一个模板,它采用这样的函数签名并以某种方式声明一个方法:

template <typename F>
struct Foo {
   [F's-return-type] Method(F's-Arg-pack]...) { ... }
};

因此,如果您按如下方式实例化它,您将获得如下方法:

   Foo<int(float,float)> foo;
   int x = foo.Method(1.0f, 2.0f);

或者也许有不同的方法来做到这一点?

回答

您可以F使用非常简单的部分专业化进行反汇编:

template <class F>
struct Foo;

template <class Ret, class... Params>
struct Foo<Ret(Params...)> {
    Ret Method(Params...) { /* ... */ }
};

在 Coliru 上现场观看


以上是我可以从(旧式)函数签名中获取参数包吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>