flo*_*ads 3 c++ templates specialization template-specialization
考虑类似......
template<typename T>
class Vector {
...
bool operator==( const Vector<float> &rhs ) {
// compare and return
}
bool operator==( const Vector<T> &rhs ) {
// compare and return
}
...
};
Run Code Online (Sandbox Code Playgroud)
注意专业化如何高于非专业版.如果我将专业版本放在非专业版本之下,那么Vector<float>==比较仍然可以按预期工作吗?出于某种原因,我想我还记得,如果你在这个场景中使用下面的专业化,那么当编译器查看标题时,它将首先看到默认值,看它是否有效,并使用它.
您的示例代码不是专门的,而是重载.顺序很重要(尽管不在你的代码中),因为函数需要在C++中知道之前声明.因此,如果一个重载调用另一个,或者中间的另一个函数调用过载集,则调用可能会在某个不需要的地方结束.您的示例代码有效且通用.
出于某种原因,我想我还记得,如果你在这个场景中使用下面的专业化,那么当编译器查看标题时,它将首先看到默认值,看它是否有效,并使用它.
您正在考虑以下规则
如果模板,成员模板或类模板的成员是明确专用的,则应在首次使用该特化之前声明该特化,这将导致发生隐式实例化,在发生此类使用的每个翻译单元中; 无需诊断.
我不能不引用标准中关于专业化的热闹说法
根据显式专业化声明的相对位置及其在翻译单元中的实例化点(如上下文所述),可以影响程序是否格式良好.写专业时,要注意它的位置; 或者使它编纂将是一种试图点燃其自焚的试验.
| 归档时间: |
|
| 查看次数: |
1336 次 |
| 最近记录: |