Показать сообщение отдельно

  #3422  
Старый 20.04.2019, 03:23
san0
Постоянный
Регистрация: 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
 
Ответить с цитированием