如何增加模板类型int参数?

时间:2017-07-09 23:28:41

标签: c++

我有这样的事情:

template<int i>
struct s {};

我需要写下这个:

s<1> a = inc<s<0>>;

我认为可以通过以下方式完成:

template<template<int I> typename S>
using inc = S<I + 1>;

但它不起作用,gcc说模板参数无效。

GCC 7,-std = c ++ 14

1 个答案:

答案 0 :(得分:0)

您的方法无效,因为您已将s<0>传递给inc,而s已完全专注于#include <tuple> #include <type_traits> #include <vector> template < int i > struct s { constexpr static int value = i; }; template < typename S > struct incrementer; template < int i > struct incrementer < s<i> > { typedef s<i + 1> type; }; template < typename S > using inc = typename incrementer<S>::type; int main() { s<1> a = inc<s<0>>{}; }

#include <tuple>
#include <vector>

template < int i >
struct s {
    constexpr static int value = i;
};

template < typename S >
struct incrementer;

template < int i >
struct incrementer < s<i> >
{
    typedef s<i + 1> type;
};

template < typename S >
typename incrementer<S>::type inc = typename incrementer<S>::type{};    

int main()
{
    s<1> a = inc<s<0>>;
}

要使用问题的语法(即没有初始化括号),您需要variable template from C++17

<dom-repeat>