zoukankan      html  css  js  c++  java
  • CPP Templates 之 ADL应用举例

    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
    }
  • 相关阅读:
    整理前端面试题1
    前端面试题2
    6.显示锁Lock 和 线程通信Condition
    5.创建执行线程的方式之三 :实现Callable 接口
    4.闭锁 CountDownLatch
    3.ConcurrentHashMap 锁分段机制 Copy-On-Write
    2.原子变量 CAS算法
    1.volatile关键字 内存可见性
    13.MyBatis注解式开发
    12.查询缓存
  • 原文地址:https://www.cnblogs.com/bayonetxxx/p/1598246.html
Copyright © 2011-2022 走看看