簡體   English   中英

typedef類

[英]class of typedefs

我在工作中看到了以下代碼

typedef int         real_type;
typedef vector<int> vector_type;


template <class ASD> class program_class
{
  public:
    typename ASD::vector_type member_func();
};


template <typename ASD> typename ASD::real_type program_class<ASD>::member_func()
{
    typedef typename ASD::real_type      R;
    typedef typename ASD::vector_type    V;

    return 123;
}

從概念上講,我不明白返回類型如何表達如下: typename ASD::real_type 原則上這要求我們實例化ASD的類型是一類typedef,對吧?

我能看到一個如何實現這個目標的例子嗎?

正確。 使用這種返回類型處理聲明會導致實例化ASD引用的任何類模板(如果有的話)。

如果ASD的成員聲明有錯誤,那么編譯器會在實例化program_class< ASD >時抱怨ASD嵌套實例化失敗。

全局vector_type位於全局命名空間中。 如果使用范圍運算符::范圍更改為范圍運算符的左側,則對於模板,范圍是ASD而不再是全局范圍。

這意味着,正如您所注意到的那樣, ASD類(無論是什么)必須在其中定義自己的vector_typereal_type ,否則編譯器會給您一個錯誤。


例:

typedef int real_type;  // The global type alias
...

struct Foo
{
    typedef long real_type;  // The local type alias
    ...
};

program_class<Foo> my_program_object;

現在在program_classreal_type將是Foo::real_type而不是global ::real_type

正如您在我的示例中所看到的,您可以使用不同的基類型,因為兩個類型的別名彼此完全分離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM