c++ - 在模板参数中扩展类型 N 次

标签 c++ templates c++14 std-function

我有以下问题:

template< std::size_t N >
class A
{
  std::function< std::size_t( /*std::size_t,....,std::size_t <- N-times*/) > foo;
};

正如您在上面看到的,我尝试声明一个 std::function<...> foo作为类(class)的一员A .在这里,我希望 foo 具有返回类型 std::size_t (这没问题)作为输入,我将传递 N 次类型 std::size_t但我不知道怎么办。有没有可能?

非常感谢。

最佳答案

你可以使用std::index_sequence:

template<std::size_t N, typename = std::make_index_sequence<N>>
struct A;

template<std::size_t N, std::size_t... S>
struct A<N, std::index_sequence<S...>> {
    std::function<std::size_t(decltype(S)...)> foo;
};

Live example

如果你愿意,你也可以定义它展开的类型:

template<typename T, std::size_t N, typename = std::make_index_sequence<N>>
struct A;

template<typename T, std::size_t N, std::size_t... S>
struct A<T, N, std::index_sequence<S...>> {
    template<std::size_t>
    using type = T;

    std::function<std::size_t(type<S>...)> foo;
};

关于c++ - 在模板参数中扩展类型 N 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39995149/

相关文章:

c++ - 继承和类型数组

c++ - char,hex,因为它显示 ffffff

c++ - 好友模板功能

c++ - 默认生成的复制构造函数是常量表达式的规则是什么?

c++ - 无法使用 XCode 7.0.1 获取 C++14

c++ - 模板类的模板函数特化

c++ - 检测可移动驱动器(例如 USB 闪存驱动器)C/C++

C++ 错误 : terminate called after throwing an instance of 'std::bad_alloc'

c++ - 通过转换它们来组成可变参数模板参数

c++ - 非类型模板类成员特化