C++ 可变数量的可变参数模板参数

马修康

我有以下类型别名:

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), ...) };
 }
};

我知道,这是无效的语法,ReturnArgs为他们的模板组未解析之外。目标是允许函数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那里是不必要的,而constexprC++17 中的the使这种格式不正确(因为您不能在 C++17 中使用constexpr std::vector)。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++可变参数模板参数迭代

来自分类Dev

C中可变数量的参数?

来自分类Dev

c ++ 11递归可变参数模板

来自分类Dev

可变参数模板和C数组

来自分类Dev

C ++可变参数模板基础

来自分类Dev

C ++可变参数模板产品

来自分类Dev

C ++可变参数模板推导失败

来自分类Dev

c ++ 11递归可变参数模板

来自分类Dev

C ++-从可变参数模板制作Tupple

来自分类Dev

C ++在可变参数模板内部专门化可变参数模板

来自分类Dev

在C ++中使用可变参数模板迭代参数包

来自分类Dev

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

来自分类Dev

获取C ++可变参数模板参数的序数

来自分类Dev

线性层次结构的C ++可变参数模板参数

来自分类Dev

C ++可变参数模板参数遇到问题

来自分类Dev

将 C 数组转换为可变参数模板参数

来自分类Dev

C ++ 11可变数量的参数,相同的特定类型

来自分类Dev

C ++可变数量的参数,其格式为std :: cout

来自分类Dev

可变数量的参数 C# 互操作

来自分类Dev

在 C 中传递可变数量参数的更紧凑的方法

来自分类Dev

C ++可变参数模板参数方法传递给没有可变参数的方法

来自分类Dev

在C ++中的可变参数模板中获取可变参数size_t ...参数的总和

来自分类Dev

在C ++中的可变参数模板中获取可变参数size_t ...参数的总和

来自分类Dev

C ++可变参数模板方法专业化

来自分类Dev

C ++使用可变参数模板绑定成员函数

来自分类Dev

C ++-可变参数模板部分专业化

来自分类Dev

C ++ 11中的可变参数模板和多重继承

来自分类Dev

C ++可变参数模板特化(和static_assert)

来自分类Dev

C ++ 11可变参数模板和std :: endl