7
过了一段时间,我又发现模板模板参数的一个功能。见例如下面的代码片断:有没有办法在模板模板参数中推导别名模板,同时仍然保留其被推断上下文的属性
template <template <class> class TT, class T>
void foo(TT<T>) {
}
template <class T>
using typer = T;
int main() {
foo<typer>(int{});
}
别名模板传递给模板为模板模板参数并用于进一步检测,因为它是推导出上下文模板的其它参数。美女!
然而就当别名模板本身需要进行推断它看起来像编译器都疯了:
template <template <class> class>
struct tag{};
template <template <class> class TT, class T>
void foo(tag<TT>, TT<T>) {
}
template <class T>
using typer = T;
int main() {
foo(tag<typer>{}, int{});
}
当然
编译器是正确的TT
可以从两个tag<TT>
推断以及如TT<T>
参数foo
,而int{}
与具有类型参数模式的模板模板不匹配。有没有办法保留T
的扣除上下文,但在TT<T>
中使TT
未推导出上下文?
P.S.我的意图是纯粹的,这只是一个理论问题,不存在背后的问题。
老实说,我看不出任何使用第一_beautifulne ss_也不是第二次尝试。无论如何,这个问题很有趣,+1。 – skypjack
@skypjack正如我所说我甚至没有考虑可能的用法,所以你可能是没有任何... –