std::bind 의 두번 째 인자를 가져올 수 있는 방법이 있습니까?
글쓴이: hsnks100 / 작성시간: 월, 2013/11/18 - 9:57오후
class CumberParent
{
public:
std::function test;
} cp;
class AnotherClass
{
public:
void someFunction(){ .... }
void doSome()
{
cp.test = std::bind(&AnotherClass::someFunction, this);
}
};
cp.test 에서 std::bind 의 두번 째 인자 this 를 가져올 수 있는 방법이 있습니까?
아시면 귀중한 답변 부탁드립니다.
불가능한건가요? 가능할거 같은데 암만 찾아도 나오질 않네요.
cp.test.target 이 답인줄 알았는데 제가 잘 모르는건지... 잘 안되네요.
이것을 해야하는 이유는 AnotherClass 가 가지고 있는 함수 someFunction 이 AnotherClass 의 소멸자가 불러진 이후에 호출될 가능성이 있기 때문에
CumberParent 에서 미리 해당하는 함수는 = nullptr 를 대입하여 호출하지 않기 위함입니다.
Forums:
불가능합니다. 소멸자에서 cp.test를 무효화하려면
불가능합니다. 소멸자에서 cp.test를 무효화하려면 여기에 널포인터를넣어버림 됩니다.
무효화 시킬 녀석을 찾아야 되는데 별도로 두번 째
무효화 시킬 녀석을 찾아야 되는데 별도로 두번 째 인자를 저장을 해야하는건가요?
----------------------------------------------------
개인 블로그: https://kangssu.com
cp는전역변수가 아닌가요? 올리신코드는
cp는전역변수가 아닌가요? 올리신코드는 전역변수인데요.
예 배열형태입니다. class
예 배열형태입니다.
class CumberParent
{
public:
std::function test;
}
vector cps;
이 상황에서 넘겨줬던 this 가지고 해당 function 호출을 무효화시켜야 합니다.
재답글 달아주셔서 정말 감사합니다.
배열이면 인덱스를 저장하고 있다가 소멸자에서 인덱스로
배열이면 인덱스를 저장하고 있다가 소멸자에서 인덱스로 접근해서 cp[idx].test = nullptr 처럼 하면되겠네요. 중간에 벡터 크기가 줄어든다면 그냥 벡터가 아니라 std::map을 쓰시거나 몇개안된다면 this값도 같이 CumberParent 구조체에 저장해두고 순차 검색으로 처리할수도 있고요.
std::bind(&AnotherClass::some
정말 감사합니다.
std::bind(&AnotherClass::someFunction, this) 에서 this 를 빼올 수 없다면
호출 할 때, pair(std::bind(&AnotherClass::someFunction, this), this); 이렇게 this 를 두번 쓰는 방법으로 해결보는 거죠?
참 아쉽네요... ㅜㅜ
----------------------------------------------------
개인 블로그: https://kangssu.com
그렇게 하셔도 되고, CumberParent를
그렇게 하셔도 되고, CumberParent를 struct CumberParent { std::function test; void *owner = nullptr; } 처럼 하시고 cp[idx] = ...; cp[idx].owner = this; 처럼 해도 되지요.
구현하는 방법이야 이리저리 해보면 뭔가 나오기 마련인데, 그 보다는 이 구조가 필수적인지를 한 번 더 고민해보시는게 좋을 듯합니다. 상속과 가상함수로 해결해야할 문제는 아닌가요?
예 고민해보겠습니다 ~ ^^
예 고민해보겠습니다 ~ ^^
댓글 달기