我有这样的事情:
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
答案 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>