我正在努力扩展一些人在这里帮助我Call function inside a lambda passed to a thread所以我的工人类可以支持移动构造函数和移动 <Button.Content>
<TextBlock>
<Run Text="This" />
<Run Text="is" FontStyle="{Binding Converter={StaticResource ItalicConverter}}" />
<Run Text="a..." />
</TextBlock>
</Button.Content>
,但是我遇到了我的类绑定的问题{ {1}}通过复制(或引用)到线程,以便它可以访问类值。哪些是 public class ItalicConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return "Italic";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return true;
}
}
,operator=
和this
。
但是当我尝试移动它,因为线程绑定到另一个条件变量atomic<bool>
和condition_variable
时,我在其上做的任何事情都不起作用。我怎样才能解决这个问题?
我是否需要使用更复杂的对象并将其移动而不是lambda,以便线程可以对它进行引用?还是有另一种选择。
一如既往的帮助将非常感激:)。
这是实现的片段(MWE)。
mutex
对于大量代码转发感到抱歉。
答案 0 :(得分:2)
我会修理&#39;它只是说worker
是不可复制且不可移动的,如果他们想要移动它,则将其留给worker
的用户将其存储为unique_ptr
。这完全没有错。实际上,它很普通。
如果你绝对希望这个类是可移动的,你可以使用Pimpl设计模式:创建一个Worker::Impl
嵌套类worker
拥有unique_ptr
。 Impl
类是不可复制的,不可移动的,基本上是您当前的worker
类。 lambda将有一个指向Impl
类的指针,而不是worker
类。 worker
类只包含unique_ptr
Impl
以外的任何内容,以及转发到Impl
类&#39}的函数。函数,默认的复制和移动ctors /运算符将适用于两个类(工作程序将是可复制的但不可移动,impl将是不可复制的和不可移动的。)