我正在嘗試在Objective-C++方法中創建std::function
,並將它傳遞給C++方法。如何將std :: function從Objective-C++傳遞到C++方法
但是,我收到了一個錯誤的訪問異常。
使用塊:
std::function<void(void)> callback = ^{
[self doSomething];
};
callback(); // <-- this works
self.myCppObject-> setButtonCallback(callback);
使用Lambda:我使用的Objective-C塊和拉姆達試圖
std::function<void()> callback = [self]() {
[self doSomething];
};
callback(); // <-- this works
self.myCppObject->setButtonCallback(callback);
在我的C++類:
void MyCppClass::setButtonCallback (std::function<void()> callback)
{
buttonCallback = std::move (callback); // <-- crash here
}
我也試過在Objective-C++類中存儲callback
作爲屬性:
@property (nonatomic, assign) std::function<void()> callback;
異常被拋出這裏:哪些來自在C++方法回調分配(從<functional>
線1717)
template<class _Rp, class ..._ArgTypes>
function<_Rp(_ArgTypes...)>&
function<_Rp(_ArgTypes...)>::operator=(function&& __f) _NOEXCEPT
{
if (__f_ == (__base*)&__buf_) // <-- EXC_BAD_ACCESS here
__f_->destroy();
else if (__f_)
__f_->destroy_deallocate();
__f_ = 0;
...
。我嘗試使用std::move
和通過=
複製。
UPDATE
問題竟然是那個myCppObject尚未初始化,因爲這是它初始化它的構造函數的類的子類,但是我打電話基本[super init]
代替[super initWith...]
的我需要的。感謝@羅曼的線索。
拋出的異常究竟在哪裏? – SingerOfTheFall
@SingerOfTheFall info added – Adamski