[英]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_type
和real_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_class
, real_type
將是Foo::real_type
而不是global ::real_type
。
正如您在我的示例中所看到的,您可以使用不同的基類型,因為兩個類型的別名彼此完全分離。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.