使用 lambda 时对重载函数的调用不明确

Ambigious call to overloaded function when using lambda

以前从未使用过 lambda,我不明白我必须在哪里添加它。

我的错误是“显示:对重载函数的模糊调用”

Show() 可以取 2 种类型 CustomizeToastCustomizeToastAsync。所以我想我需要在某处指定 CustomizeToast 但我一辈子都看不到在哪里。

这是我当前的代码:

ToastContentBuilder()
    .AddText(L"Hello World!")
    .Show([](ToastNotification const& toast) -> void
    {
       toast.Tag(L"1");
    });

错误:

error C2668: 'winrt::impl::consume_Microsoft_Toolkit_Uwp_Notifications_IToastContentBuilderClass<winrt::Microsoft::Toolkit::Uwp::Notifications::IToastContentBuilderClass>::Show': ambiguous call to overloaded function
Microsoft.Toolkit.Uwp.Notifications.0.h(2159,60): message : could be 'auto winrt::impl::consume_Microsoft_Toolkit_Uwp_Notifications_IToastContentBuilderClass<winrt::Microsoft::Toolkit::Uwp::Notifications::IToastContentBuilderClass>::Show(const winrt::Microsoft::Toolkit::Uwp::Notifications::CustomizeToastAsync &) const'
Microsoft.Toolkit.Uwp.Notifications.0.h(2158,31): message : or       'auto winrt::impl::consume_Microsoft_Toolkit_Uwp_Notifications_IToastContentBuilderClass<winrt::Microsoft::Toolkit::Uwp::Notifications::IToastContentBuilderClass>::Show(const winrt::Microsoft::Toolkit::Uwp::Notifications::CustomizeToast &) const'
message : while trying to match the argument list '(winrt::MyApplication::implementation::Toast::ShowToastNotification::<lambda_786678859ea03b85c00686eebdcb39db>)'

项目是使用 Microsoft.Toolkit.Uwp.Notifications

的 UWP 项目

Show() can take 2 types CustomizeToast and CustomizeToastAsync.

这显然是对 API 开发人员的疏忽。现在因为 类 都可以从 lambda 构造,编译器不知道使用哪个,所以你必须引导它:

ToastContentBuilder()
    .AddText(L"Hello World!")
    .Show(CustomizeToast{[](ToastNotification const& toast) -> void
    {
       toast.Tag(L"1");
    }});

这可读性差且繁琐,但为其构造语法糖会容易出错且有点令人费解。