您可以定义自动构造类 - 铸造需要指向这个对象(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