템플릿 액션이 있다고 가정 해 봅시다.내 C++ 람다 함수를 캡처 할 수없는 이유는 무엇입니까?
class XCallbackInvoker : public CallbackInvoker<X>
{
public:
XCallbackInvoker (Action<int> callback)
: CallbackInvoker<X>(
Action< ::boost::shared_ptr<X> >(
[&callback](::boost::shared_ptr<X> x) -> void
{
Action<int> callbackCopy = callback;
callbackCopy(x->errorCode());
}))
{
}
};
이제 임시 복사를 사용하지 않으면 값을 콜백에 의해 참조 된, 잘 컴파일하지만 런타임 오류가 발생합니다 (내 콜백 손실됩니다). 내 lambda에 값 ([=callback]
)으로 콜백 인수를 전달하고 임시를 사용하지 않으면 컴파일 오류가 발생합니다 (내 표현식에서 일부 const-volatile 한정자가 손실됩니다 ...).
임시를 사용하는 대신 값으로 람다 함수를 캡처합니까?
당신은 또한'CallbackInvoker는 <>'우리가이 자신을 컴파일 시도 할 수 있습니다에 대한 코드를 게시하시기 바랍니다 수 있습니까? – ildjarn
@ildjarn, 감사합니다. –
컴파일러 오류가있는 경우 "내 표현식이 일부 const-volatile 한정자를 잃어 버릴 것"으로 응축하지 말고 질문에 복사하는 것이 좋습니다. 오류 메시지는 아마도이 문제를 일으키는 특정 용도를 암시하고있었습니다. –