1

根据C++ 中的异步编程(Windows Store 应用程序)

// Explicit construction. (Not recommended)
// Pass the IAsyncOperation to a task constructor.
// task<DeviceInformationCollection^> deviceEnumTask(deviceOp);

// Recommended:
auto deviceEnumTask = create_task(deviceOp);

为什么赋值(create_task)优先于构造?

4

2 回答 2

2

我认为无论哪种方式,您都受到约束。您将绑定到您正在构建的类以及您可能正在使用的工厂接口,并且要保持与对您的实现中使用的公共接口所做的任何更改的兼容性。在任何一个位置都可能发生破坏性变化。微软对这个问题的回答来自 create_task() 文档:create_task() 只是一个方便的函数,因为它允许在创建任务时使用“auto”关键字。 http://msdn.microsoft.com/en-us/library/vstudio/hh913025.aspx

于 2013-08-26T01:31:19.983 回答
1

我认为通常使用工厂而不是调用构造函数更可取的原因是这与接口的特定实现耦合较少。如果您调用构造函数,那么您的程序与给定的实现紧密耦合。

与工厂的对象构造耦合更少,也更灵活和可扩展。例如,在 API 的下一个版本中,提供者可能会决定弃用某些实现或将其替换为其他实现。如果您只使用工厂,那么他们可以简单地更改它的实现以返回另一个类的实例,或者在内部注入更多的依赖项。但是,如果您的程序与特定的类绑定,那将很难实现。

于 2013-08-12T20:30:18.003 回答