【发布时间】:2017-08-31 00:35:33
【问题描述】:
template <typename Method, typename>
struct is_default : std::false_type { };
上面的代码和这个有什么区别:
struct default_ { };
template <typename Method>
struct is_default<Method, decltype((void)
static_cast<default_>(*(Method*)0)
)>
: std::true_type
{ };
我可以弄清楚最后一个用于识别Method是否为默认值。但我无法理解 decltype((void)static_cast<default_>((Method*)0)) 的使用,它是如何工作的,以及它如何使第二个代码块与第一个代码块不同?像 template <typename Method, typename> 这样的模板参数列表中只有一个 typename 是什么意思?
【问题讨论】:
-
你知道什么是显式和部分模板特化吗?
-
@KerrekSB:我知道partia specialization的基本含义,但是我不知道这两个代码块的区别,我需要一些帮助。
-
未命名的类型名称类似于未命名的参数。在这里,
Enabler或AlwaysVoid是个好名字。 -
@Jarod42:谢谢。这是一个很好的提示。
标签: c++ c++11 templates c++14 template-meta-programming