替换void rvalue引用

时间:2018-01-27 13:57:10

标签: c++

我正在编写一种消息传递接口,其中前端向后端请求类型为Var的变量。最简单的形式是:

Var backend();
Var interface() {return backend();}
Var frontend() {return interface();}

不幸的是,尽管interface实现意识到类型Var,但它的签名却不是。如果在c ++中存在void rvalue引用,我会使用像

这样的东西
void&& interface();

使用适当的强制转换,因为我希望此进程尽可能保持自由复制,并且我不希望调用Var构造函数。我想出了这个黑客:

void interface(void* p) {new (p) Var(backend());}
Var get()
{
    char hack[sizeof(Var)];
    impl_get(static_cast<void*>(&hack));
    return std::move(*reinterpret_cast<A*>(hack));
}

据我所知,只调用Var的移动构造函数(如果已定义)。这个解决方案是标准的还是安全的,有没有更清洁的方法呢?

0 个答案:

没有答案