why is it still virtual

main
Brett 2025-04-20 16:20:50 -04:00
parent fb092422a8
commit e5a3c9d669
3 changed files with 23 additions and 4 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.20)
include(cmake/color.cmake)
set(BLT_VERSION 5.4.1)
set(BLT_VERSION 5.4.2)
set(BLT_TARGET BLT)

View File

@ -26,6 +26,8 @@
#include <variant>
#include <blt/std/types.h>
#include "blt/logging/logging.h"
namespace blt
{
/*
@ -191,6 +193,8 @@ namespace blt
template <bool should_throw = false, typename... MemberFuncs>
constexpr auto call_member(const MemberFuncs... funcs)
{
static_assert(std::conjunction_v<std::is_member_function_pointer<std::decay_t<MemberFuncs>>...>,
"Must provide only pointers to member functions!");
return std::visit([=](auto&& value)
{
using ValueType = std::decay_t<decltype(value)>;
@ -206,13 +210,22 @@ namespace blt
using ReturnType = std::invoke_result_t<FuncType, ValueType>;
if constexpr (std::is_invocable_v<FuncType, ValueType>)
{
return std::make_optional(std::invoke(func, value));
return std::make_optional(((value).*(func))());
}
return std::optional<ReturnType>{};
}(std::forward<decltype(funcs)>(funcs))));
}(cast_member_ptr<std::remove_reference_t<decltype(value)>>(std::forward<decltype(funcs)>(funcs)))));
}, m_variant);
}
template <typename MemberFunc, typename... Args>
constexpr auto call_member_args(const MemberFunc func, Args&&... args)
{
return std::visit([=](auto&& value)
{
using ValueType = std::decay_t<decltype(value)>;
return ((value).*(cast_member_ptr<ValueType>(func)))(std::forward<Args>(args)...);
}, m_variant);
}
template <size_t I>
[[nodiscard]] constexpr bool has_index() const noexcept
@ -345,6 +358,12 @@ namespace blt
}
private:
template <typename Derived, typename Base, typename ReturnType, typename... Args>
static auto cast_member_ptr(ReturnType (Base::*base_func)(Args...))
{
return reinterpret_cast<ReturnType (Derived::*)(Args...)>(base_func);
}
value_type m_variant;
};

@ -1 +1 @@
Subproject commit d88c5e15079047777b418132ece5879e7c9aaa2b
Subproject commit 8a889d3699b3c09ade435641fb034427f3fd12b6