【发布时间】:2013-04-05 17:09:58
【问题描述】:
我正在阅读this 并试图了解N3601 的内容。它说这个成语在网络搜索中出现了很多,但我找不到任何东西。什么是
template<typename T, T t>
成语,它解决了什么问题,它是如何使用的,什么是隐式模板参数,以及该提案旨在解决什么问题?
【问题讨论】:
-
从模板
template <typename T> void foo(T t);开始。使该参数成为编译时值:template <typename T, T t> void bar();(我认为您的意思是,而不是class)。现在考虑如何调用foo(5);使T 成为int,但要使用bar,您需要bar<int, 5>();。这是朝着正确的方向发展吗? -
我的意思是 T t,不是 T 类。修正了。
-
@chris 我知道你现在要去哪里了。 bar 需要在我们给它的任何类型上是通用的,但也需要与另一个模板参数相同类型的值。我们需要指定它的类型和值来推断 5 是一个 int。该提案显示了它在反射库中的用法,但直到今天我才看到它。这还能怎么用?
-
+1。啊!我喜欢这个提议。我认为它可能帮助我解决 C++11 无法解决的 this problem。
-
@Nawaz,好点子。我实际上并没有想过它可以允许 C++11 不能以这种方式实现什么。
标签: c++ templates idioms typename c++14