호출 가능한 요소를 호출 할 수 있도록 호출 가능한 요소의 큐를 만들려고합니다. 호출 할 수있는 요소를 저장할 수 있고 나중에 호출해야합니다. 그 안에 저장된 정수를 확인한 후).std :: function에서 파생하는 것이 수동으로 Functor를 만드는 것입니다.
저는 지난 며칠 동안 functor와 std :: function 템플릿에 대해 읽었으며 다음 두 옵션 중 어느 것이 메모리와 성능면에서 더 좋을지 궁금합니다 다른 경우).
1 옵션 :
class UpdateFunction : public std::function<bool(unsigned long long int)> {
public:
unsigned long long int _intendedTime;
};
void main()
{
typedef std::deque<UpdateFunction> UpdateQueue;
UpdateQueue _updateQueue;
_updateQueue.push_back(UpdateFunction([](unsigned long long int time)->bool{return outsideFunction(time);}));
_updateQueue.back()._intendedTime = 10;
}
2 옵션 :
class UpdateFunction {
bool (*_fn)(unsigned long long int);
unsigned long long int _intendedTime;
UpdateFunction::UpdateFunction(bool (*fn)(unsigned long long int), unsigned long long int time)
: _fn(fn),
_intendedTime(time)
{
}
bool operator()(unsigned long long int time)
{
return _fn(time);
}
};
void main()
{
typedef std::deque<UpdateFunction> UpdateQueue;
UpdateQueue _updateQueue;
_updateQueue.push_back(UpdateFunction(outsideFunction, 10));
}
내가 예상대로이 작동 것조차 확실하지 않다 그래서 누군가가 표준에서 파생 코드 :: 기능을 본 적이 없다 .
내가하려는 것은 다음과 같습니다. https://stackoverflow.com/a/9050114/4076418하지만 변수 인수가 필요하지 않습니다. (실제로 위의 코드에있는 하나의 단일 서명 만 있습니다. 그것의 인스턴스를 포함하는 대신 std :: function에서 파생하는 것이 더 나을 것이라고 생각했습니다. 솔직히 말해서, 나는 얼마나 느리거나 빠른 std :: function인지 모른다. 나는 타입 지우기에 대한 언급을 읽었지만 아직도 그게 무엇인지 알아 내려고하고있다.
NB : 저는 C++ 초보자입니다. 참고 문헌을 옮겨서 의미론을 옮기기 위해 노력하고 있습니다. 따라서 코드에 명백한 오류가 있거나 코딩 스타일이 끔찍한 경우 사과드립니다.
말할 수있는 특별한 생성자가 필요하지 않습니다. 하지만 내 부분에 오류가있어 제 경우에 맞을지 확실하지 않습니다. 나는 (어리석게도) outsideFunction에 대기열에있는 호출 가능 요소보다 많은 매개 변수가 있다는 것을 생략 했으므로 이것이 첫 번째 옵션에서 람다를 사용하는 이유입니다. 죄송합니다,하지만 고마워요 :) – elatalhm
내가 썼던 코드가 얼마나 엉망인지 깨닫고, outsideFunction에 더 많은 매개 변수가있는 경우 두 번째 옵션에서 작동하지 않습니다. 지금 당장 고칠거야. – elatalhm
답변 해 주셔서 감사합니다. 혼란 스러움을 많이 겪은 후, 제 질문은 거의 쓸모가 없다는 것을 깨달았습니다. 만약 내가 원래의 옵션 2와 같은 함수 포인터를 가지고 도망 갈 수 있는지 궁금 해서요. 그러나 currying과 lambda의 변수 캡쳐를 사용하고 싶다면 std :: function을 사용해야합니다.). 그리고 std :: function의 부재/존재로 인해 성능에 대해 묻는 것이 었습니다. – elatalhm