您可以定義自動構造類 - 鑄造需要指向這個對象(working demo),當它有新的對象創建的想法:
首先這個自動構造函數(或者任何構造函數)類:
#include <tuple>
#include <utility>
template <typename ...T>
class AutoConstructor
{
public:
template <typename ...U>
AutoConstructor(U&&... a) : params(std::forward<U>(a)...) {}
template <typename U>
operator U*()
{
return construct<U>(std::index_sequence_for<T...>{});
}
private:
template <typename U, std::size_t ...I>
U* construct(std::index_sequence<I...>)
{
return new U(std::forward<T>(std::get<I>(params))...);
}
std::tuple<T...> params;
};
這將是很難使用這個類W/O助手化妝功能:
template <typename ...T>
auto makeAuto(T&&... a)
{
return AutoConstructor<T...>(std::forward<T>(a)...);
}
然後 - 這樣的 「魔術」 是可能的:
long&& d = 7;
int* a = makeAuto();
S *s = makeAuto(std::ref(*a), 2, std::make_unique<float>(3), std::move(d));
假設S具有C-TOR S(int& a, const int& b, std::unique_ptr<float> c, long d)
只是爲了總結 - 這段代碼我介紹的是很容易使用 - 但我懷疑這將是很好的習慣,有無處不在的代碼makeAuto
電話...
第二種形式,我會考慮在C作爲慣用++,如'的PVAr = malloc的(*的sizeof的PVAr);'是C.僅有一個正切想。 ** + 1 **。 – StoryTeller
@StoryTeller:不幸的是,我很快就按下了「答案」,因爲'decltype(m_member)'評估爲指針類型......指針必須以某種方式被移除。 –
'decltype(* m_member)'怎麼樣?那裏有得救的機會嗎?或者,被詛咒的'decltype'扣除規則是否將其評估爲參考?無論什麼優秀的答案。 – StoryTeller