过去两天我正在阅读std::enable_shared_from_this
(g ++版)源代码。有两个问题让我感到困惑
让我先简要介绍一下源代码。
template<typename _Tp>
class enable_shared_from_this {
...
private:
template<typename _Tp1>
friend void
__enable_shared_from_this_helper(const __shared_count<>& __pn,
const enable_shared_from_this* __pe,
const _Tp1* __px) noexcept {
}
};
template<typename _Tp1, typename _Tp2>
void
__enable_shared_from_this_helper(const __shared_count<>&,
const enable_shared_from_this<_Tp1>*,
const _Tp2*) noexcept;
问题:
1.注意第const enable_shared_from_this* __pe
行,没有标记'&lt;&gt;'在enable_shared_from_this
之后,这是否意味着enable_shared_from_this<__Tp1>
?
2.这里有两个重载函数模板__enable_shared_from_this_helper
,我的测试显示class enable_shared_from_this
中定义的版本将始终被调用,为什么?
谢谢你们,我们将不胜感激。
答案 0 :(得分:0)
对于1:否,这意味着此处隐含<_Tp>
,而不是附加模板参数中的<_Tp1>
。如果在类的定义(或成员方法的定义的主体)中省略类名的模板参数,并且需要类型,则隐含类本身的参数。
对于2:这与第一个只有_Tp1
而不是_Tp
和_Tp2
而不是_Tp1
相同。