我正在编写一种消息传递接口,其中前端向后端请求类型为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
的移动构造函数(如果已定义)。这个解决方案是标准的还是安全的,有没有更清洁的方法呢?