Lamda (๋๋ค) ํฌ์คํ ์ ํ๊ธฐ ์ํด ๊ณต๋ถํ๋ ์ค,,
์ด์ํ๊ฒ ๊ธ์ด ์์จ์ก๋ค. ๊ธฐ์ด ์์ด ์ฌ์ฉํ ๋ ค๊ณ ํ๋๊น ๊ทธ๋ฐ๊ฒ ๊ฐ์์
ํจ์ ๊ฐ์ฒด์ ๋ํด ๋จผ์ ๊ณต๋ถ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค
1. ํจ์ ํธ์ถ ์ฐ์ฐ์
ํจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด๋ณด๊ธฐ ์ ์, ํจ์ ํธ์ถ ์ฐ์ฐ์๋ฅผ ๋ด๋ณด๊ฒ ๋ค
์์ฃผ์์ฃผ ๊ฐ๋จํ ์์๋ฅผ ๋ค์ด๋ณด๊ฒ ๋ค
#include <iostream>
#include <algorithm>
using namespace std;
int myPlus(int num1, int num2)
{
return num1+num2;
}
int main(void)
{
int num1 = 10;
int num2 = 20;
cout << myPlus(num1, num2) << endl;
return 0;
}
myPlus๋ผ๋ ํจ์์ ํ๋ผ๋ฏธํฐ ๊ฐ์ผ๋ก int ํ ๋ณ์๋ฅผ ๋ฃ์ด ๋ง์ ์ ํ๋ ์์์ด๋ค
์ด๋ ๊ฒ ์ฐ๋ฆฌ๋ ํจ์๋ฅผ ์ฌ์ฉ์์ ์๋ ํ์์ผ๋ก ์ฌ์ฉํ๋ค
int func_name(int num1..)
์ฌ์ฉํ๋ ๊ฒ๋ค์ ํจ์ ๋ฐํํ, ํจ์ ์ด๋ฆ, ํ๋ผ๋ฏธํฐ ๊ทธ๋ฆฌ๊ณ ํจ์ ํธ์ถ ์ฐ์ฐ์์ธ () ์ด๋ค.
๋ณดํต ๊ดํธ๋ผ๊ณ ๋ถ๋ฅด๋ "( )" ๋ฅผ ํจ์ ํธ์ถ ์ฐ์ฐ์๋ผ๊ณ ํ๋ค
์ง์ญํ๋ฉด ํจ์๋ฅผ ๋ถ๋ฅด๋~~ ์ฐ์ฐ์(operator) ์ ๋๊ฐ ๋๊ฒ ๋ค
ํจ์ ํธ์ถ ์ฐ์ฐ์๋ ํจ์ ๊ฐ์ฒด์ operator ์ฌ์ฉ์ ํนํ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค
์ธ์ ๊ฐ ๋ค์ด๋ดค์ ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ์์, +/-/<<.. ์ด๋ฐ ์ฐ์ฐ์์ ๋ํด
C++์์๋ ์ค๋ฒ๋ก๋ฉ์ ์ฌ์ฉํด์! ์๊ธฐ๋ง์ ์ฐ์ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค
์๋ฅผ ๋ค์ด, operator+() ์๋ฐ ์์ผ๋ก.
()๋ผ๋ ์ฐ์ฐ์๋ operator()๋ก ์ค๋ฒ๋ก๋ฉํด์ ์ฌ์ฉํ ์ ์๋๊ฑฐ๋ค → () ๋ operator()์ ๊ฐ๋ค๋ ๋ง
2. ํจ์ ๊ฐ์ฒด
๊ทธ๋ฌ๋ฉด ํจ์ ํธ์ถ ์ฐ์ฐ์์ ํจ์ ๊ฐ์ฒด๋ ๋ญ ์๊ด์ธ๊ฐ?๋ฅผ ์์๋ณด๊ฒ ๋ค
ํจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์, ์์ ์์ ์ฒ๋ผ ๋ง์ ์ ํ๋ ์์๋ฅผ ๋จผ์ ๋ณด์
class MyPlus
{
public:
int operator()(int num1_, int num2_)
{
return num1_ + num2_;
}
};
int main(void)
{
int num1 = 10;
int num2 = 20;
MyPlus funcP;
cout << funcP(num1, num2) << endl;
return 0;
}
MyPlus๋ผ๋ ํด๋์ค ์์ ๋ด๋ถ ํจ์๋ก operator()๋ผ๋ ํจ์๋ฅผ ๋ง๋ค์ด๋ณด์๋ค
funcP(num1, num2)
์ ๋ถ๋ถ์ ์ฃผ์ ๊น๊ฒ ๋ณด์
MyPlus์ ๊ฐ์ฒด์ธ funcP์ ํจ์ ํธ์ถ ์ฐ์ฐ์์ธ ()๋ก
MyPlus ํด๋์ค ๋ด๋ถ์ operator()๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค
์์ ์์ ์์, myPlus() ํจ์์ ์ฌ์ฉ๋ฒ์ด ๋ค๋ฅด์ง ์๊ฒ ๋๊ปด์ง์ง ์๋๊ฐ,,?
ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ง์น ํจ์์ฒ๋ผ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ด๊ฒ์ ํจ์ ๊ฐ์ฒด ๋ผ๊ณ ๋ถ๋ฅธ๋ค
operator() ์ฐ์ฐ์๋ฅผ ์ค๋ฒ๋ก๋ฉํ์๊ธฐ ๋๋ฌธ์, .operator() ๊ฐ ์๋ต๋ ๊ฒ๋ ์์๊ฐ์
funcP(num1, num2);
funcP.operator()(num1, num2);
๊ทผ๋ฐ, ํจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ํจ์ ํธ์ถ ์ฐ์ฐ์๋ก ํจ์๋ฅผ ์ค๋ฒ๋ก๋ฉํด์
์ฌ์ฉํ๋ ๊ฒ ๊น์ง๋ ์๊ฒ ๋๋ฐ, ๊ตณ์ด? ๋ผ๋ ์๊ฐ์ด ๋ ๋ค
์คํ๋ ค ์ผ๋ฐ ํจ์๋ณด๋ค ๋ ๋ณต์กํ๊ฑฐ ์๋๋๊น ์ค์ต๋,,
์๋ ์์๋ฅผ ๋ณด๋ฉด ์๊ฐ์ด ๋ฌ๋ผ์ง ์ ์๋ค
int mySum(int num1)
{
int sumRet = 0;
sumRet += num1;
return sumRet;
}
int main(void)
{
int num1 = 10;
int num2 = 20;
/* 1. ํจ์ ์ด์ฉ */
auto ret = mySum(num1);
cout << ret << endl;
ret = mySum(num2);
cout << ret << endl;
/* 10 */
/* 20 */
return 0;
}
mySum์ด๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํด์, num1๋ ๋ํ๊ณ ~ num2๋ ๋ํ๊ณ ์ถ์์ผ๋
๊ธ๋ก๋ฒ ํจ์๊ฐ ์๋์ด์, ์ง์ญ๋ณ์์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋์ ํ ์ ์์ผ์
ํ์ง๋ง, ํด๋์ค ๋ฉค๋ฒ ๋ณ์์ ์ ์ฅํด ๋์ผ๋ฉด? ๋์ ๋ ๊ฐ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
class MySum
{
int sumRet = 0;
public:
int operator()(int num1_)
{
sumRet += num1_;
return sumRet;
}
};
int main(void)
{
int num1 = 10;
int num2 = 20;
/* 2. ํจ์ ๊ฐ์ฒด ์ด์ฉ */
MySum sumP;
ret = sumP(num1);
cout << ret << endl;
ret = sumP(num2);
cout << ret << endl;
/* 10 */
/* 30 */
return 0;
}
MySum์ด๋ผ๋ ํด๋์ค์ ๊ฐ์ฒด์ธ sumP๋ฅผ ์ฌ์ฉํ์ฌ, ๋ด๋ถ์ operator() ํจ์๋ฅผ ()๋ก ์ค๋ฒ๋ก๋ฉํ์ฌ
ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์์ธ sumRet์ ๋ํ ๊ฐ์ ๋์ ํ ์ ์๋ค ์ด ๋ง์ด๋ค
์ ๋ฆฌํ์๋ฉด, ํจ์ ๊ฐ์ฒด์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค
- ํด๋์ค์ ํน์ฑ์ ์ฌ์ฉํ์ฌ ์ํ ๊ฐ์ ์ ์ ์์
- ์ผ๋ฐ ํจ์๋ณด๋ค ์๋๊ฐ ๋ ๋น ๋ฆ → ํจ์์ ์ธ๋ผ์ธํ ( ๋ค์ ํฌ์คํ ์์ ๋ค๋ฃฐ ์์ )
์์ ์ ์ฐ์์์ ๋ง๊ฒ ์๋ง๊ฒ ์ฌ์ฉํด๋ณด์
๋ค์ ํฌ์คํ ์์๋ ํจ์์ ์ธ๋ผ์ธ๊ณผ ๋๋ค๋ฅผ ๊ณต๋ถํด์ ์ ๋ฆฌํด์ผ๊ฒ ๋ค
์ฉ์ด ์ ๋ฆฌ๋ ํ์ํ ๊ฒ ๊ฐ์
'๐ C๋ C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Boost Asio์ ๋ํด์ ์์๋ณด์ (4) | 2021.05.20 |
---|---|
C++ ํด๋์ค ๋ฉค๋ฒ๋ณ์ ์ด๊ธฐํ๋ฅผ ์์๋ณด์ (4) | 2021.03.25 |
C++ ๋๋ฌธ์/์๋ฌธ์ ๋ณํ (4) | 2021.02.26 |
C++ std::map์ ์ฌ์ฉํด๋ณด์ (4) | 2021.01.07 |
C++ ์ ์ญ ๋ณ์์ ์ ์ ๋ณ์๋ฅผ ์์๋ณด์ (0) | 2021.01.04 |