【发布时间】:2020-08-01 05:04:07
【问题描述】:
我正在尝试制作一个模板,该模板推断与一个模板参数关联的类型,同时在非推断上下文中处理其他类型。下面提供了一个最小的示例。我可以使用两个演绎上下文来做我正在寻找的事情,但它可以在一个中完成吗?我想我会尝试使用type_identity 之类的东西,但我没有运气。
现场示例:https://onlinegdb.com/By0iDOM-P
template<size_t... Idx, size_t s>
void foo(index_sequence<Idx..., s>) {
cout << s << endl;
}
template<typename T>
struct TypeIdentity {
using Type = T;
};
template<typename T>
using Identity = typename TypeIdentity<T>::Type;
template<typename... Idx, size_t s>
void bar(index_sequence<Identity<Idx>{}..., s>) {
cout << s << endl;
}
template<size_t s>
void baz(index_sequence<0, s>) {
cout << s << endl;
}
template<size_t... Idx>
struct Qux {
template<size_t s>
static void qux(index_sequence<Idx..., s>) {
cout << s << endl;
}
};
int main()
{
foo<0>(make_index_sequence<2>{}); // couldn't deduce template parameter ‘s’
bar<integral_constant<size_t, 0>>(make_index_sequence<2>{}); // couldn't deduce template parameter ‘s’
baz(make_index_sequence<2>{});
Qux<0>::template qux(make_index_sequence<2>{});
return 0;
}
【问题讨论】:
标签: c++ templates template-argument-deduction type-deduction