
20.04.2019, 03:23
|
|
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами:
6530249
Репутация:
133
|
|
Сообщение от index
Хотелось бы увидеть реализацию подобного на c++
Последний из способов, наверное, наиболее благоприятный по причине низкой посадки по рантайму
Сообщение от Спойлер
C++:
Код:
#include
#include
#include
#include
#include
struct
Man1
{
unsigned
long
long
index
=
0LL
;
std
::
string name
=
"Name"
;
void
doSmth11
(
)
{
std
::
cout
index
name
cost
group
pool
;
pool
.
push_back
(
Man1
{
}
)
;
pool
.
push_back
(
Man2
{
}
)
;
for
(
auto
&&
e
:
pool
)
{
if
(
std
::
type_index
(
e
.
type
(
)
)
==
std
::
type_index
(
typeid
(
Man1
)
)
)
{
auto
restoredMan1
=
std
::
any_cast
(
e
)
;
restoredMan1
.
doSmth11
(
)
;
restoredMan1
.
doSmth12
(
)
;
}
else
if
(
e
.
type
(
)
.
hash_code
(
)
==
typeid
(
Man2
)
.
hash_code
(
)
)
{
auto
restoredMan2
=
std
::
any_cast
(
e
)
;
restoredMan2
.
doSmth21
(
)
;
restoredMan2
.
doSmth22
(
)
;
}
}
}
Сообщение от Спойлер
C++:
Код:
#include
#include
struct
ManEssential
{
virtual
void
__unused
(
void
)
{
}
;
}
;
struct
Man1
:
ManEssential
{
unsigned
long
long
index
=
0LL
;
std
::
string name
=
"Name"
;
void
doSmth11
(
)
{
std
::
cout
index
name
cost
group
pool
;
pool
.
push_back
(
new
Man2
)
;
pool
.
push_back
(
new
Man1
)
;
for
(
auto
&&
e
:
pool
)
{
if
(
auto
restoredMan1
=
dynamic_cast
(
e
)
)
{
restoredMan1
->
doSmth11
(
)
;
restoredMan1
->
doSmth12
(
)
;
}
else
if
(
auto
restoredMan2
=
dynamic_cast
(
e
)
)
{
restoredMan2
->
doSmth21
(
)
;
restoredMan2
->
doSmth22
(
)
;
}
}
}
Сообщение от Спойлер
C++:
Код:
#include
#include
struct
Man1
{
unsigned
long
long
index
=
0LL
;
std
::
string name
=
"Name"
;
void
doSmth11
(
)
{
std
::
cout
index
name
cost
group
ObjectSlicing
(
const
T
&&
man
)
:
type
(
[
=
]
{
if
constexpr
(
std
::
is_same
(
)
)
{
return
ManSubtype
::
kMan1
;
}
else
if
constexpr
(
std
::
is_same
(
)
)
{
return
ManSubtype
::
kMan2
;
}
}
(
)
)
{
}
}
;
int
main
(
)
{
std
::
vector
pool
;
pool
.
push_back
(
ObjectSlicing
(
Man1
{
}
)
)
;
pool
.
push_back
(
ObjectSlicing
(
Man2
{
}
)
)
;
for
(
auto
&&
e
:
pool
)
{
if
(
e
.
type
==
ManSubtype
::
kMan1
)
{
Man1 restoredMan1
=
e
;
restoredMan1
.
doSmth11
(
)
;
restoredMan1
.
doSmth12
(
)
;
}
else
if
(
e
.
type
==
ManSubtype
::
kMan2
)
{
Man2 restoredMan2
=
e
;
restoredMan2
.
doSmth21
(
)
;
restoredMan2
.
doSmth22
(
)
;
}
}
}
Сообщение от index
Можно поинтересоваться, откуда информация?
Первоапрельская шутка 2018 года, не воспринимайте всерьез
http://modernescpp.com/index.php/no-new-new
Сообщение от Yuan
Каким образом можно поменять расположение киллстата по вертикали?
samp.dll + 0x66655 =>
patch 5 bytes to mov eax,00000010, where 0x10 - Y offset
samp.dll + 0x66668 =>
patch 5 bytes to mov eax,00000020, where 0x20 - X offset
|
|
|