你方法不能工作,因爲你通過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>>{};
}
與來自問題語法工作(即不用初始化括號),你需要一個variable template from C++17。
#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>>;
}
看起來像你想'inc
>'來命名一個類型 - 但它然後沒有任何意義上的初始化;預計在那裏表達。你真的想在這裏實現什麼? –您可能會想到[像這樣](http://rextester.com/LYS30846)。但是,目前還不清楚你打算如何使用它。 –
是的,我想通過編寫'inc
>'得到類似於'<0>'的類型,但是'<1>'。 –