[英]How to use a type defined and associated with a Template parameter in a class Template?
[英]Type defined in template use to define template method of the class
有一個代碼示例:
template <class T>
class CMessage
{
public:
using message_ptr = typename std::shared_ptr<T>;
static message_ptr Create (T val)
{
return std::make_shared<T>(val);
}
};
class CBuilder
{
public:
template <typename MT> MT::message_ptr CreateMessage()
{
return MT::message_ptr();
}
};
CBuilder builder;
CMessage<int>::message_ptr msg = builder.CreateMessage<CMessage<int>>();
CBuilder clsss是正確的嗎? 可以在CBuilder中使用MT :: message_ptr嗎?
當您編寫“ MT :: message_ptr”時,實際上是在編寫一個表達式,該表達式取決於參數模板(MT)的定義:稱為依賴表達式。
然后,編譯器的問題是知道“ message_ptr”是類型名稱還是其他名稱(函數,變量...)。 為了解決這個問題,標准要求類型名稱的任何相關表達式都以關鍵字... typename :-)作為前綴。
因此,這是您的成員函數模板的正確定義:
template <typename MT>
typename MT::message_ptr CreateMessage()
{
return typename MT::message_ptr();
}
編輯
順便說一句,“ std :: shared_ptr <T>”不是從屬表達式,因此您不得在此處使用關鍵字“ typename”。 只需寫:
using message_ptr = std::shared_ptr<T>;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.