Skip to content

Commit 5e08295

Browse files
committed
refactor(desktop): improve vector check
1 parent 5056209 commit 5e08295

3 files changed

Lines changed: 36 additions & 2 deletions

File tree

modules/desktop/src/desktop.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
#include "desktop.h"
22
#include "app.impl.hpp"
33

4-
#include "utils/wide.hpp"
54
#include "utils/range.hpp"
5+
#include "utils/traits.hpp"
6+
7+
#include "utils/wide.hpp"
68
#include "utils/opaque.hpp"
79

810
#include <saucer/modules/desktop.hpp>
@@ -38,7 +40,7 @@ void pick(saucer_desktop *desktop, saucer_picker_options *opts, char *out, size_
3840

3941
auto final = std::vector<char>{};
4042

41-
if constexpr (std::same_as<result_t, std::vector<saucer::fs::path>>)
43+
if constexpr (saucer::bindings::container<result_t, std::vector>)
4244
{
4345
for (const auto &path : *result)
4446
{

private/utils/traits.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma once
2+
3+
namespace saucer::bindings
4+
{
5+
template <typename T, template <typename...> typename C>
6+
struct is_container;
7+
8+
template <typename T, template <typename...> typename C>
9+
concept container = is_container<T, C>::value;
10+
} // namespace saucer::bindings
11+
12+
#include "traits.inl"

private/utils/traits.inl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#pragma once
2+
3+
#include "traits.hpp"
4+
5+
#include <type_traits>
6+
7+
namespace saucer::bindings
8+
{
9+
template <typename T, template <typename...> typename C>
10+
struct is_container : std::false_type
11+
{
12+
};
13+
14+
template <template <typename...> typename C, typename... Ts>
15+
struct is_container<C<Ts...>, C> : std::true_type
16+
{
17+
};
18+
} // namespace saucer::bindings
19+
20+
#include "traits.inl"

0 commit comments

Comments
 (0)