在QuantLib中,我找到了这段代码:
//! specialization of null template for this class
template <>
class Null<Array> {
public:
Null() {}
operator Array() const { return Array(); }
};
任何人都知道这是关于什么的?这段代码的目的是什么?如果你有关于这个问题的资源我也很感兴趣。谢谢
答案 0 :(得分:3)
Null值用于表示缺失值。
例如,当你得到一个QL :: Real r时,你可以很容易地检查它是否为空值:
if(r == Null<Real>())
Array的特化被广泛用作将Array作为可选参数的函数中的默认值。
答案 1 :(得分:2)
我猜可以在某处定义
Null
类,在这里我们用Array
初始化它。
几乎正确。在某处定义了Null
类template,带有类型参数。在这里我们specialize模板,以便每当使用Array
类型实例化模板时,将使用此定义而不是原始定义。
至于Null
的用途,请参阅documentation。
模板类为给定类型提供空值。
答案 2 :(得分:1)
user2079303和jimifiki的答案都是正确的。我添加这个答案只是为了提供一些上下文。
Null
类模板用于添加类似于Python中None
的空值,并且在我们想要检测时(无论出于何种原因)用作默认参数调用者没有传递一个值,而不是显式传递一个&#34; null&#34;如果我们今天编写代码,我们可能会转而使用boost::optional
(很快就会成为std::optional
),它会提供更清晰的语义和明确的nil
宾语。但是,我们会保留Null
以避免破坏客户端代码。
对于算术类型,该事物的工作原理是提供Null
特化,当转换为数字时,给出一个不太可能作为合法值传递的特征(至少在调用的上下文中) );即,最大可用int或float取决于类型。对于Array
,这并不适用:如您所见,Null<Array>()
转换为空Array
,代码无法与空{{1}区分开来实例明确传递。但是,有人可能会争辩说空数组本身就是一个空值(即,通过传递一个空数组,即使您传递Array
实例,也不会传递任何值这样就可以了; Array
类也是如此,它的Date
特化返回了一个空状态。