[英]Calling pointer-to-member function in call for a function passed to a template function
[英]Calling a member function pointer passed as template argument from lambda crashes
我有以下代碼:
#include <functional>
struct Foo {
void Callback()
{}
};
template <class T, class P>
std::function<void()> MemCB(T &t, P p)
{
//return [&]() {t.Callback();}; //no issues if done this way.
return [&]() {(t.*p)();};
}
int main()
{
Foo f;
std::function<void()> func = MemCB(f, &Foo::Callback);
func();
}
這會崩潰(至少在啟用優化的情況下),問題在於嘗試在此處調用成員函數:
return [&]() {(t.*p)();};
發生什么情況導致這里出現問題?
我有什么辦法可以像在這里嘗試的那樣傳遞對象t
和指向成員函數p
的指針,並在t
對象上調用p
?
您的問題是捕獲的p
成為懸掛的“參考”,將其更改為:
template <class T, class P>
std::function<void()> MemCB(T &t, P p)
{
return [&, p]() {(t.*p)();};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.