使用 lambda 时对重载函数的调用不明确
Ambigious call to overloaded function when using lambda
以前从未使用过 lambda,我不明白我必须在哪里添加它。
我的错误是“显示:对重载函数的模糊调用”
Show()
可以取 2 种类型 CustomizeToast
和 CustomizeToastAsync
。所以我想我需要在某处指定 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");
}});
这可读性差且繁琐,但为其构造语法糖会容易出错且有点令人费解。
以前从未使用过 lambda,我不明白我必须在哪里添加它。
我的错误是“显示:对重载函数的模糊调用”
Show()
可以取 2 种类型 CustomizeToast
和 CustomizeToastAsync
。所以我想我需要在某处指定 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 typesCustomizeToast
andCustomizeToastAsync
.
这显然是对 API 开发人员的疏忽。现在因为 类 都可以从 lambda 构造,编译器不知道使用哪个,所以你必须引导它:
ToastContentBuilder()
.AddText(L"Hello World!")
.Show(CustomizeToast{[](ToastNotification const& toast) -> void
{
toast.Tag(L"1");
}});
这可读性差且繁琐,但为其构造语法糖会容易出错且有点令人费解。