模板友元函数重载

时间:2014-01-13 06:02:30

标签: c++ c++11

过去两天我正在阅读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中定义的版本将始终被调用,为什么?

谢谢你们,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

对于1:否,这意味着此处隐含<_Tp>,而不是附加模板参数中的<_Tp1>。如果在类的定义(或成员方法的定义的主体)中省略类名的模板参数,并且需要类型,则隐含类本身的参数。

对于2:这与第一个只有_Tp1而不是_Tp_Tp2而不是_Tp1相同。