ν΄λ‘μ μμΌλ‘ κ°μ²΄λ₯Ό μ΄λ μμΌμΌ ν λκ° μλ€. μ΄λ μ μ© κ°μ²΄ νΉμ 볡μ¬λ³΄λ€ μ΄λ μ±λ₯μ΄ λ μ’μ κ°μ²΄λ₯Ό ν΄λ‘μ μμμ μ¬μ©ν΄μΌ νλ κ²½μ°μ΄λ€. νμ§λ§ C++11 μμλ μ΄λ₯Ό μ§μνμ§ μμΌλ©° C++14μμλ μ΄κΈ°ν μΊ‘μ³λ₯Ό ν΅ν΄ κ°λ₯νλ€. C++11μμλ νΈλ²μ μ¬μ©ν΄μ νλ΄ λΌ μ μλ€.
λλ€λ‘ λΆν° μμ±λλ ν΄λ‘μ ν΄λμ€μ μν μλ£ λ©€λ²μ μ΄λ¦μ μ§μ νκ³ ννμμ ν΅ν΄ μ΄κΈ°ν ν μ μλ€.
class Widget {
public:
void test() {
std::cout << "test call\n";
}
};
int main() {
auto pw = std::make_unique<Widget>();
auto func = [pw = std::move(pw)]{
return pw->test();
};
func();
return 0;
}μ μ½λμμ = μ μ’λ³μ ν΄λ‘μ ν΄λμ€ μμ μλ£λ©€λ² μ΄λ¦μ΄κ³ , μ°λ³μ κ·Έκ²μ μ΄κΈ°ν νλ ννμμ΄λ€.
λ°μΈλμ μνμ μΈμλ‘ λμ΄μ¨ ν¨μμ λ§€κ°λ³μλ‘ ν¨μκ°μ²΄λ₯Ό μμ±νμ¬ λ°ννλ κΈ°λ₯μ κ°μ§κ³ μλ€.
λ°μΈλλ ν¨μκ°μ²΄ λ΄μ λ§€κ°λ³μλ‘ μ λ¬λ κ°μ²΄λ₯Ό ν¬ν¨ν λ μΌκ° λ§€κ°λ³μλ 볡μ¬λκ³ μ€λ₯Έκ° λ§€κ°λ³μλ μ΄λλλ€. μ΄ μ±μ§μ μ΄μ©νμ¬ c++11 ν΄λ‘μ μ νκ³λ₯Ό μ°ννλ€.
λ°μΈλ ν¨μ κ°μ²΄κ° νΈμΆλλ©΄ λ°μΈλμ μ μ₯λ λ§€κ°λ³μλ€μ΄ 첫 λ§€κ°λ³μλ‘ μ§μ λ κ°μ²΄μ μ λ¬λλ€.
class Widget {
public:
void test() {
std::cout << "test call\n";
}
};
int main() {
auto func = std::bind([](std::unique_ptr<Widget>& pw){
return pw->test();
}, std::unique_ptr<Widget>(new Widget()));
func();
return 0;
}μ΄ μ₯μ 곡λΆνλ©΄μ μλ¬Έμ΄ λ€μλ κ²μ μ μ΄μ λ§€κ°λ³μλ₯Ό λ°μ μ μλ λλ€λ₯Ό μ μνλ©΄ λ κ² κ°μλ° λΌλ μκ°μ΄ λ€μλ€.
μ’λ μκ°ν΄ 보λ std μμ λ§€κ°λ³μκ° μλ ν¨μκ°μ²΄λ₯Ό λ°μμ λ΄λΆ λ‘μ§μ μ¬μ©νλ κ°μ²΄λ€μ μ¨μΌν λλ μμ κ°μ κΈ°λ²μ΄ νμν κ² κ°λ€.