CPP Templates 之 ADL應用舉例

來源:互聯網
上載者:User
ADL應用舉例:

1.友元名稱插入:

在類中的友元函式宣告可以是該友元函數的首次聲明,請參見
下面的例子:

template<typename T>
class C{
    ...
    friend void f();
    friend void f(C<T> const&);
};

void g(C<int>* p)
{
    f();//error
    f(*p);//ok
}

通常而言,友元聲明在外圍(類)範圍中是不可見的
如果友元函數所在的類屬於ADL的關聯類別集合,那麼我們這個
外圍類是可以找到該友元聲明的。

2.插入式類名稱

如果在類本身的範圍中插入該類的名稱,我們就稱該名稱為
插入式類名稱。它可以被看做該類範圍中的一個非受限名稱
而且是可訪問的名稱。
例如:

#include <iostream>

int C;

class C{
private:
    int i[2];
public:
    static int f()
    {
        return sizeof(C);
    }
};

類模板也可以具有插入式類名稱,他們的而後面可以緊跟模板
實參,如果沒有緊跟模板實參,那麼他們代表的就是用參數來
代表實參的類,例如:

template<template<typename T> class TT> class X
{};

template <typename T> class C
{
    C* a;//正確,等價於C<T> *a;
    C<void> b;//正確
    X<C> c;//error
    X<::C> d;//error
    X< ::C> e;//ok
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.