簡體   English   中英

如何為`std::make_unique 創建一個包裝器<t> `?</t>

[英]How to create a wrapper for `std::make_unique<T>`?

我想為std::unique_ptr<T>std::make_unique<T>創建一個包裝器,因為我認為它們看起來很難看並且需要很長時間才能輸入。 (是的,我就是這樣的人)。

我已經毫無問題地完成了我的UniquePtr類型別名,但無法讓我的MakeUnique工作。 這似乎有點像兔子洞,想知道這里是否有人可以幫我解決這個問題?

到目前為止我所擁有的:

template <class T>
using UniquePtr = std::unique_ptr<T>;

template<typename T, typename... Args>
UniquePtr<T> MakeUnique<T>(Args... args) // recursive variadic function
{
    return std::make_unique<T>(args);
}

提前謝謝了!

您需要正確轉發值,並且需要擴展包。

首先,讓它編譯:

template<typename T, typename... Args>
UniquePtr<T> MakeUnique(Args... args) // not recursive
{ //                   ^---- no need for <T> when defining function template 
    return std::make_unique<T>(args...); // the ... expands the pack
}

然后,您需要轉發,因為args...會復制所有內容。 您想移動右值並復制左值:

template<typename T, typename... Args>
UniquePtr<T> MakeUnique(Args&&... args)
{
    return std::make_unique<T>(std::forward<Args>(args)...);
}

暫無
暫無

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

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