[C ++] La diferencia entre typedef y typedef typename

typedef se usa para definir tipos:
  1. Por simplicidad, claridad. Por ejemplo,

    vector<list<int *>*> temp(10);
    

    Se puede simplificar para:

    typedef list<int *> listnum;
    typedef vector<listnum *> vectornum;
    vectornum temp(10);
    
  2. Defina un puntero al miembro:

    class A {
    public:
        virtual void sup() = 0;
    };
    typedef void (A::* pt)();
    void f(A *a)
    {
        pt ptemp = &A::sup;
    }
    
typedef typename
  1. template <typename var_name> class class_name; indica que var_name es un tipo, que puede reemplazar cualquier tipo cuando se instancia la plantilla, incluidos no solo los tipos integrados (int, etc.), sino también las clases de tipos personalizados. Esta es la forma en la pregunta, en otras palabras, en plantilla y plantilla, el nombre de tipo y la clase tienen exactamente el mismo significado.

  2. typename var_name; significa que la definición de var_name aún no se ha dado, esta declaración generalmente aparece en la definición de la plantilla, por ejemplo:

    template <class T>
    void f() {
    	typedef typename T::A TA;     // 声明 TA 的类型为 T::A
    	TA a5;                      // 声明 a5 的类型为 TA
    	typename T::A a6;             // 声明 a6 的类型为 T::A
    	TA * pta6;                     // 声明 pta6 的类型为 TA 的指针
    }
    

    Debido a que T es un tipo que solo se conoce cuando se crea una instancia de la plantilla , el compilador es más ignorante de T :: A. Para informar al
    compilador que T :: A es un tipo legal, la declaración typename puede evitar que el compilador informe un error.

401 artículos originales publicados · Me gusta 14 · Visitas 100,000+

Supongo que te gusta

Origin blog.csdn.net/LU_ZHAO/article/details/105446458
Recomendado
Clasificación