首页 > 解决方案 > C++14。声明一个具有相同类型和固定长度参数列表的函数

问题描述

有没有一种可能的方法来使用 C++14 实现某种帮助器结构,它将作为模板参数 a Number、返回类型Ret和输入类型T,并且将包含成员类型std::function<Ret(T...)>where sizeof...(T) == Number

标签: c++templatesc++14variadic-templatestemplate-meta-programming

解决方案


我想下面的 C++14 代码可以告诉你一个方法

#include <utility>
#include <functional>
#include <type_traits>

template <typename T, std::size_t>
using use_type = T;

template <typename...>
struct bar;

template <typename Ret, typename T, std::size_t ... Is>
struct bar<Ret, T, std::index_sequence<Is...>>
 { std::function<Ret(use_type<T, Is>...)> func; };

template <std::size_t N, typename Ret, typename T>
struct foo : public bar<Ret, T, std::make_index_sequence<N>>
 { };

int main ()
 {
   using T1 = std::function<void(int, int, int)>;
   using T2 = decltype(foo<3u, void, int>::func);

   static_assert( std::is_same<T1, T2>::value, "!" );
 }

推荐阅读