[英]C++ Variable number of variadic template parameters
我有以下类型别名:
using VoidFunc = void (*)();
我想定义一个这样的类:
class SomeClass {
public:
template<template<typename Return, typename... Args>... Funcs>
static constexpr typename std::vector<VoidFunc> registerFunctions(Funcs<Return, Args...>... funcs) {
return { ((VoidFunc)(funcs), ...) };
}
};
我知道这是无效的语法,因为Return
和Args
在其模板组之外无法解析。 目的是允许函数registerFunction
接受数量可变的函数,这些函数都具有不同的原型。 在实际的实现中,重要的是保留每个函数的类型信息以与其他constexpr
函数一起使用。 有没有办法在C ++ 17或更高版本中实现这一目标?
您实际上并不关心任何这些底层类型(至少不在此处显示的代码中)。 因此,请不要使用它。 您只关心这些都是函数指针:
typename <typename... F>
static std::vector<VoidFunc> registerFunctions(F*... funcs)
{
static_assert((std::is_function_v<F> && ...));
return { reinterpret_cast<VoidFunc>(funcs)... };
}
如果确实需要其他特征的签名,则可以将funcs
每个元素传递到不同的函数模板中,然后重新推导那里的实际签名。
请注意, typename
是不必要的存在,我们的constexpr
在C ++ 17,使本病的形成(因为你不能在C ++ 17有constexpr
std::vector
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.