我已经浏览了一段时间寻找答案,但似乎没有找到答案。因此,我决定在这里专门问这个问题。
我一直在尝试使用这样的东西(及其变体):
struct NonCopyable
{
NonCopyable() { };
NonCopyable(const NonCopyable& other) = delete;
NonCopyable(NonCopyable&& other) { };
};
struct Host
{
Host(NonCopyable&& nc) : m_nc(nc) { }
NonCopyable m_nc;
};
为了达成这个:
Host h(NonCopyable());
换句话说,我想在m_nc内部构造NonCopyable。这是可能吗?
最佳答案
请注意nc
是一个左值作为命名参数,您需要将其转换为右值,例如通过std::move
Host(NonCopyable&& nc) : m_nc(std::move(nc)) { }
编辑
有一个most vexing parse问题。
Host h(NonCopyable());
不是变量定义,而是函数声明;它声明了一个名为h
的函数,该函数返回Host
并接受带有函数指针类型的未命名参数(不接收任何内容并返回NonCopyable
)。只需将其更改为
Host h{NonCopyable()};
即可。