From abcdc75e008aa87dc733f29a9ec75e6508923ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaigan=C3=A9sh=20Kumaran?= Date: Mon, 20 Feb 2023 21:08:23 +0530 Subject: [PATCH] Add `to_hstring` overload for `IStringable` (#1271) --- cppwinrt/code_writers.h | 1 + cppwinrt/cppwinrt.vcxproj | 1 + cppwinrt/cppwinrt.vcxproj.filters | 5 ++++- strings/base_stringable_to_hstring.h | 8 ++++++++ test/old_tests/UnitTests/to_hstring.cpp | 12 ++++++++++++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 strings/base_stringable_to_hstring.h diff --git a/cppwinrt/code_writers.h b/cppwinrt/code_writers.h index c986c927f..e0162fe45 100644 --- a/cppwinrt/code_writers.h +++ b/cppwinrt/code_writers.h @@ -3253,6 +3253,7 @@ struct WINRT_IMPL_EMPTY_BASES produce_dispatch_to_overridable w.write(strings::base_reference_produce); w.write(strings::base_deferral); w.write(strings::base_coroutine_foundation); + w.write(strings::base_stringable_to_hstring); w.write(strings::base_stringable_format); w.write(strings::base_stringable_streams); } diff --git a/cppwinrt/cppwinrt.vcxproj b/cppwinrt/cppwinrt.vcxproj index 75d8cee1e..f0d1e5706 100644 --- a/cppwinrt/cppwinrt.vcxproj +++ b/cppwinrt/cppwinrt.vcxproj @@ -81,6 +81,7 @@ + diff --git a/cppwinrt/cppwinrt.vcxproj.filters b/cppwinrt/cppwinrt.vcxproj.filters index 01aecb75e..96129ab20 100644 --- a/cppwinrt/cppwinrt.vcxproj.filters +++ b/cppwinrt/cppwinrt.vcxproj.filters @@ -169,7 +169,7 @@ strings - + strings @@ -184,6 +184,9 @@ strings + + strings + diff --git a/strings/base_stringable_to_hstring.h b/strings/base_stringable_to_hstring.h new file mode 100644 index 000000000..f92da965b --- /dev/null +++ b/strings/base_stringable_to_hstring.h @@ -0,0 +1,8 @@ + +WINRT_EXPORT namespace winrt +{ + inline hstring to_hstring(Windows::Foundation::IStringable const& stringable) + { + return stringable.ToString(); + } +} diff --git a/test/old_tests/UnitTests/to_hstring.cpp b/test/old_tests/UnitTests/to_hstring.cpp index 9f3463a56..1d287c09b 100644 --- a/test/old_tests/UnitTests/to_hstring.cpp +++ b/test/old_tests/UnitTests/to_hstring.cpp @@ -4,6 +4,14 @@ using namespace winrt; +struct stringable : winrt::implements +{ + winrt::hstring ToString() + { + return L"a stringable object"; + } +}; + namespace { void test_cases() @@ -82,6 +90,10 @@ namespace hstring const c = to_hstring(b); REQUIRE(a == c); } + { + auto const obj = make(); + REQUIRE(to_hstring(obj) == obj.ToString()); + } } }