Skip to content

Commit 763e945

Browse files
Merge pull request #27 from contour-terminal/improvement/add_new_CallOnMembers
Add CallOnMembersWithoutName function
2 parents 3d30b49 + 6c98e81 commit 763e945

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.10)
2-
project(reflection-cpp VERSION 0.3.0 LANGUAGES CXX)
2+
project(reflection-cpp VERSION 0.3.1 LANGUAGES CXX)
33
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
44

55
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

include/reflection-cpp/reflection.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1264,12 +1264,18 @@ constexpr void EnumerateMembers(Callable&& callable)
12641264
}
12651265

12661266
template <typename Object, typename Callable>
1267-
requires std::same_as<void, std::invoke_result_t<Callable, std::string, MemberTypeOf<0, Object>>>
1267+
requires std::is_invocable_v<Callable, std::string, MemberTypeOf<0, Object>>
12681268
void CallOnMembers(Object& object, Callable&& callable)
12691269
{
12701270
EnumerateMembers(object, [&]<size_t I, typename T>(T&& value) { callable(MemberNameOf<I, Object>, value); });
12711271
}
12721272

1273+
template <typename Object, typename Callable>
1274+
void CallOnMembersWithoutName(Object& object, Callable&& callable)
1275+
{
1276+
EnumerateMembers(object, [&]<size_t I, typename T>(T&& value) { callable.template operator()<I, T>(value); });
1277+
}
1278+
12731279
/// Folds over the members of a type without an object of it.
12741280
///
12751281
/// @param initialValue The initial value to fold with

test-reflection-cpp.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ TEST_CASE("single value record", "[reflection]")
7878
CHECK(name == "value");
7979
CHECK(value == 42);
8080
});
81+
8182
}
8283

8384
TEST_CASE("core", "[reflection]")
@@ -181,6 +182,12 @@ TEST_CASE("CallOnMembers", "[reflection]")
181182
result += " ";
182183
});
183184
CHECK(result == R"(name=John Doe email=john@doe.com age=42 )");
185+
186+
std::string resultAnother;
187+
Reflection::CallOnMembersWithoutName(ps, [&resultAnother]<size_t I, typename FieldType>(FieldType const& value) {
188+
resultAnother += std::format("{}", value);
189+
});
190+
CHECK(resultAnother == R"(John Doejohn@doe.com42)");
184191
}
185192

186193
TEST_CASE("FoldMembers.type", "[reflection]")

0 commit comments

Comments
 (0)