2017-04-08 61 views
1

我正在學習C++。 我想使用模板參數名稱,因爲它在類之外。 我找不到最好的解決方案,但現在我使用「使用」聲明。但它不能使用相同的名稱。 有沒有更好的解決方案?或者是否有任何良好的習慣或良好的命名來通過「使用」重新聲明模板參數?如何在課堂外使用模板參數名稱?

以下代碼爲示例;通過使用類型= T_TypeA它重新聲明T_TypeA但我想用T_TypeA因爲它是在結構B.

template <typename T_TypeA> 
struct A { 
    using Type = T_TypeA; 
}; 

template <typename Object> 
struct B { 
    using Type = typename Object::Type; 
    Type object = 3; 
}; 

void test_using_for_template_parameter_name(void) { 
    B<A<int>> b; 
    std::cout << "value = " << b.object << std::endl; 
} 

回答

2

下面的代碼是示例;它通過使用Type = T_TypeA重新聲明T_TypeA,但我想使用T_TypeA,因爲它在結構B中。

模板參數名稱僅是函數模板類模板內有用,可見,他們外面沒有任何意義。所以:

template <typename T_TypeA> 
struct A { 
    using Type = T_TypeA; 
}; 

T_TypeA這裏僅作爲實例化struct A時用作模板參數的類型的佔位符名稱。

這就是爲什麼我們需要typedefs來別名類型的名稱。因此,如果T_TypeA是您想要看到的名稱:您可能想要:

template <typename TypeA> 
struct A { 
    using T_TypeA = TypeA; 
}; 
1

我想用T_TypeA因爲它是在結構B.

我不認爲有辦法做到這一點。你最好的選擇是你已經完成的。

using Type = T_TypeA; 

using Type = typename Object::Type;