@@ -52,18 +52,20 @@ class MultiPlayer final : public BaseA, public BaseB
5252
5353class RevMultiPlayer final : omath::rev_eng::InternalReverseEngineeredObject
5454{
55+ static constexpr std::ptrdiff_t TABLE_A_OFFSET = 0 ;
56+ static constexpr std::ptrdiff_t TABLE_B_OFFSET = sizeof (void *);
5557public:
56- // Table 0 (BaseA vtable): index 0 = get_a, 1 = get_a2
57- [[nodiscard]] int rev_get_a () const { return call_virtual_method<0 , 0 , int >(); }
58- [[nodiscard]] int rev_get_a2 () const { return call_virtual_method<0 , 1 , int >(); }
58+ // Table at offset 0 (BaseA vtable): index 0 = get_a, 1 = get_a2
59+ [[nodiscard]] int rev_get_a () const { return call_virtual_method<TABLE_A_OFFSET , 0 , int >(); }
60+ [[nodiscard]] int rev_get_a2 () const { return call_virtual_method<TABLE_A_OFFSET , 1 , int >(); }
5961
60- // Table 1 (BaseB vtable): index 0 = get_b, 1 = get_b2
61- [[nodiscard]] int rev_get_b () const { return call_virtual_method<1 , 0 , int >(); }
62- [[nodiscard]] int rev_get_b2 () const { return call_virtual_method<1 , 1 , int >(); }
62+ // Table at offset sizeof(void*) (BaseB vtable): index 0 = get_b, 1 = get_b2
63+ [[nodiscard]] int rev_get_b () const { return call_virtual_method<TABLE_B_OFFSET , 0 , int >(); }
64+ [[nodiscard]] int rev_get_b2 () const { return call_virtual_method<TABLE_B_OFFSET , 1 , int >(); }
6365
6466 // Non-const versions
65- int rev_get_a_mut () { return call_virtual_method<0 , 0 , int >(); }
66- int rev_get_b_mut () { return call_virtual_method<1 , 0 , int >(); }
67+ int rev_get_a_mut () { return call_virtual_method<TABLE_A_OFFSET , 0 , int >(); }
68+ int rev_get_b_mut () { return call_virtual_method<TABLE_B_OFFSET , 0 , int >(); }
6769};
6870
6971class RevPlayer final : omath::rev_eng::InternalReverseEngineeredObject
0 commit comments