• [C++] ๋žŒ๋‹ค ํ•จ์ˆ˜

    2022. 12. 5.

    by. JuneBee

    728x90
    ๋ฐ˜์‘ํ˜•

    Syntax

    [ captures ] ( params ) specs requires(optional) { body } (1)    
    [ captures ] { body } (2) (until C++23)  
    [ captures ] specs { body } (2) (since C++23)  
    [ captures ] < tparams > requires(optional) ( params ) specs requires(optional) { body } (3) (since C++20)  
    [ captures ] < tparams > requires(optional) { body } (4) (since C++20)
    (until C++23)
     
    [ captures ] < tparams > requires(optional) specs { body } (4) (since C++2  

    ์บก์ณ ๋ธ”๋ก : ์‚ฌ์šฉ ์‹œ ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์บก์ณํ•ด ๋žŒ๋‹ค body ์—์„œ ์‚ฌ์šฉ

    -> ํ˜„์žฌ ๋žŒ๋‹ค ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์บก์ณ๊ฐ€ ์•ˆ๋œ๋‹ค๊ณ  ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ ํ‘ํ‘

    ์ฒ˜์Œ์— ์‚ฌ์šฉํ•œ ์บก์ฒ˜ : this ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜ ์ฐธ์กฐ ๊ฐ€๋Šฅ

    & ๋ณ€์ˆ˜๋ช… : ์™ธ๋ถ€ ๋ณ€์ˆ˜ ์ฐธ์กฐ ๋ฐ ์ดˆ๊ธฐํ™”

     

     

    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ

    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ์ด๋ก ์€ ํ•ญ์ƒ ์˜์˜ํ•œ๋ฐ ์‹ค๋ฌด์—์„œ ๋ณด๋ฉด ๋งค์ผ ๋‹นํ™ฉ์Šค๋Ÿฝ๋‹ค. ์™œ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์“ฐ๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„๋ณด๋‹ค ์•„๋ž˜ ๋ธ”๋กœ๊ทธ์˜ ๊ธ€์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

    https://hwan-shell.tistory.com/87

    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” callback์ด๋ผ๊ณ  ํ•œ๋‹ค. callback์€ ํ•จ์ˆ˜๊ฐ€ ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅด๋Š” ํ˜•์‹์ด๋‹ค.

     

    ์‹ค๋ฌด๋ฅผ ํ•˜๋ฉด์„œ ๋Š๋‚€์ ์€ ๋‹ค๋“ค ์‹ค๋ฌด์—์„œ๋Š” getter, setter, callback๋งŒ ์•Œ๋ฉด ๋œ๋‹ค๊ณ  ํ•˜๋˜๋ฐ ๊ทธ๋ž˜์„œ์ธ์ง€ ํฌ์ธํ„ฐ๊ฐ€ ์ •๋ง ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด, ๋ณต์‚ฌ๊ฐ€ ์ผ์–ด๋‚˜๊ณ  ์ฝ”๋“œ๋„ ๊ธธ์–ด์ง€๊ณ  ๋‚˜๋ผ๊ฐ€ ๋งํ•˜๊ณ ..

     

    ํ•จ์ˆ˜ ๊ฐ์ฒด

    ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ ๊ฒƒ์ด๋‹ค.

    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋Š” ์—๋Š” ๋ช…ํ™•ํ•œ ํƒ€์ž…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— return type๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ๋“ค๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ œํ•œ์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” ์–ด๋–ค ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ๋ ์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด์„œ inlineํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ๋‹ค์‹œ ๋žŒ๋‹ค๋กœ ๋Œ์•„์™€์„œ, ๋žŒ๋‹ค๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด์™€ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ์žฅ์ ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

    ๋žŒ๋‹ค์‹ ์žฅ์ 

    1. class ์„ ์–ธ ํ•„์š” x (์ฝ”๋“œ ๊ธธ์ด ์ค„์Œ)

    2. ํ•จ์ˆ˜ inline ๊ฐ€๋Šฅ

    ๋žŒ๋‹ค๋Š” ์ด๋ฆ„์€ ์—†์ง€๋งŒ ๊ณ ์œ ํ•œ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋žŒ๋‹ค์˜ ์ด๋ฆ„๊ณผ ์–ด๋–ค ํƒ€์ž…์œผ๋กœ ์ •์˜๋˜์–ด์žˆ๋Š”์ง€ ๋ชฐ๋ผ๋„ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ๋žŒ๋‹ค๋ผ๋Š” ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„์ ‘ ์ „๋‹ฌ์ด ๋˜๊ฑฐ๋‚˜ ๋ช…ํ™•ํ•œ ๋ช…์‹œ๊ฐ€ ์—†์œผ๋ฉด ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๋‹ค๋ฆ„์ด ์—†๋‹ค.

     

     

     

     

    Reference

    https://en.cppreference.com/w/cpp/language/lambda

     

    https://hwan-shell.tistory.com/84

     

    C++ Lambda ์‚ฌ์šฉ ์ด์œ ์™€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

    C++์—๋Š” lambda๋ผ๋Š” ๋ฌธ๋ฒ•์ด ์กด์ œํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ์ด lambda๋Š” boost๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜์˜€์ง€๋งŒ ์ง€๊ธˆ์€ modern c++๋กœ ๋„˜์–ด๊ฐ€๋ฉด์„œ ์ด ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (ํ˜„์žฌ modern c++์€

    hwan-shell.tistory.com

    https://www.youtube.com/watch?v=mWgmBBz0y8c&ab_channel=TheCherno 

     

    728x90
    ๋ฐ˜์‘ํ˜•

    '๐Ÿ““ STUDY' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [C++] cbegin, crbegin, cend, crend  (0) 2022.12.05

    ๋Œ“๊ธ€