我想要做的很簡單。我有一個PayloadResult<T>帶有通用負載的模板類,在另一個類中有一個模板函式,它回傳此類的物件。
class Result
{
public:
template<class TPayload>
PayloadResult<TPayload> success(TPayload payload) { return PayloadResult<TPayload>(payload); }
}
template <TPayload>
class PayloadResult
{
private:
TPayload payload_;
public:
PayloadResult(TPayload payload)
{
payload_ = payload;
}
TPayload payload()
{
return payload;
}
}
發生的事情是編譯器告訴我success函式的回傳型別是No template named 'PayloadResult'
我將回傳型別簽名更改為 std::array<TPayload, 1> 并且它起作用了。我究竟做錯了什么?(我是 C 的新手)
提前謝謝了!
uj5u.com熱心網友回復:
以下是更正后的示例。您必須像在示例中一樣轉發宣告類模板 PayloadResult<> 以將其用作回傳型別。其次,您沒有關鍵字typename或class前面的TPayload.
//forward declare the class template PayloadResult
template <typename TPayload> class PayloadResult;
class Result
{
public:
template<class TPayload>
PayloadResult<TPayload> success(TPayload payload) { return PayloadResult<TPayload>(payload); }//now this won't give error because you have forward declared
};
//added typename
template <typename TPayload>
class PayloadResult
{
private:
TPayload payload_;
public:
PayloadResult(TPayload payload)
{
payload_ = payload;
}
TPayload payload()
{
return payload;
}
};
int main()
{
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/337193.html
