tgoop.com/cpluspluc/1189
Last Update:
π ΠΠ½ΠΎΠ½Ρ: Proxy 4 β Π½ΠΎΠ²ΡΠΉ ΡΠ°Π³ Π² C++-ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ΅
Proxy β ΡΡΠΎ header-only, ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° C++20, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π±Π΅Π· Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ
Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Windows Ρ 2022 Π³ΠΎΠ΄Π° ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΡ
ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊ Π·ΡΠ΅Π»Π°Ρ, Π³ΠΎΡΠΎΠ²Π°Ρ ΠΊ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Ρ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ.
**Π§ΡΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 4?**
- ΠΠ°Π²ΡΠΊΠΈ (Skills): ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ (format, fmt_format, rtti, as_view, slim ΠΈ Π΄Ρ.) ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠ°ΡΠ°Π΄ΠΎΠ².
- proxy_view ΠΈ weak_proxy: ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π»Ρ Π½Π΅ΡΠ»Π°ΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΠΌΡΡ
ΠΈ ΡΠ»Π°Π±ΡΡ
ΡΡΡΠ»ΠΎΠΊ.
- Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅: Π½ΠΎΠ²ΡΠ΅ API make_proxy_shared ΠΈ allocate_proxy_shared ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ Π±Π΅Π· overhead std::shared_ptr.
- Π£ΠΌΠ½ΡΠΉ Π΄ΠΈΡΠΏΠ΅ΡΡΠΈΠ½Π³ ΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΠΈ: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ weak_dispatch, explicit_conversion_dispatch, ΡΠ»ΡΡΡΠ΅Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
, ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡ proxiable_target, inplace_proxiable_target.
- Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ ΡΠ°ΡΠ°Π΄Ρ: facade_aware_overload_t ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠΎΠΈΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΡ, ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ) Π±Π΅Π· ΠΏΡΠ΅ΠΆΠ΄Π΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΠΈ.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π° Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅ β ΡΠ΄ΠΎΠ±Π½Π°Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ, FAQ, API-ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ, ΠΏΡΠΈΠΌΠ΅ΡΡ.
Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΡΠΊ Π² Compiler Explorer: ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Proxy ΠΏΡΡΠΌΠΎ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π±Π΅Π· Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΡΠ΅Π΄Ρ.
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ?
- ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ Π±Π΅Π· Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π²ΠΈΡΡΡΠ°Π»ΠΎΠΊ: ΠΌΠ΅Π½Π΅Π΅ Π½Π°Π²ΡΠ·ΡΠΈΠ²ΠΎ, Π³ΠΈΠ±ΡΠ΅ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½Π΅Π΅.
- ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²: ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²Π»Π°Π΄Π΅Π½ΠΈΡ, Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ»Π°Π±ΡΡ
ΡΡΡΠ»ΠΎΠΊ.
- ΠΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΠ°Π²Π½ΠΈΠΌΠ° ΠΈΠ»ΠΈ ΠΏΡΠ΅Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ ΡΡΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄.
- Π Π°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΡ: ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΠΉ ΠΈ Π΄Π°ΠΆΠ΅ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ
Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ.
Π§ΡΠΎ Π³ΠΎΠ²ΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ (reddit-ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ):
> βProxy library is like std::any β¦ but adds runtime polymorphism without needing inheritance.β
> β TheFreestyler83
> βIt's like doing &something as &dyn Display in Rustβ¦ you can do type erasure like virtual interfaces, but without editing types.β
> β qalmakka
> βThey claim it's both easier and faster, but β¦ ownership seems very unclear β¦β
> β Bart_V
Π Π΅Π·ΡΠΌΠ΅
- Proxy 4 β Π½ΠΎΠ²ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° Π² C++.
- ΠΠΎΠ³Π°ΡΠ°Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π°Π²ΡΠΊΠΎΠ² ΡΠ΅ΡΠ΅Π· ΡΠ°ΡΠ°Π΄Ρ.
- ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ: Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΏΡΠΈΠΌΠ΅ΡΡ Π² Compiler Explorer, Π½Π°ΡΠΈΠ²Π½ΡΠ΅ C++20 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
- ΠΡΠΈΠ·Π½Π°Π½ΠΈΠ΅ ΠΎΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠ°Ρ Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ΄Π΅ΠΉ ΠΈΠ· Rust.
@cpluspluc





