下記のコードがコンパイルエラーになる。
MainPage::MainPage(GameMain^ g) : gameMain_(g)
{
InitializeComponent();
std::function<void (Windows::UI::Xaml::Controls::Page^ )> f(std::bind(&MainPage::Subframe,*this,std::placeholders::_1));
gameMain_->SetSubFrameFunc(f);
}
void MainPage::Subframe(Windows::UI::Xaml::Controls::Page^ p){}
MainPageクラスはref classで、そのメンバ関数であるSubframeへのポインタにthisポインタをbindしてstd::functionに格納し、SetSubFrameFuncの引数として渡したいのだけれど、コンパイルエラーとなってしまう。
error C2064: 2 引数を取り込む関数には評価されません。
やっぱりdelegateを使わないといけないのかな..とか思いつつ、lambdaで囲えばいいのではと思ってやってみたらできた。
MainPage::MainPage(GameMain^ g) : gameMain_(g)
{
InitializeComponent();
//std::function<void (Windows::UI::Xaml::Controls::Page^ )> f(std::bind(&MainPage::Subframe,this,std::placeholders::_1));
gameMain_->SetSubFrameFunc(
[this](Windows::UI::Xaml::Controls::Page^ p)
{
Subframe(p);
}
);
}
void MainPage::Subframe(Windows::UI::Xaml::Controls::Page^ p)
{}
なんだかよくわからないが、これでいいや..。と思ったがさらにdelegateで書き直してみた。
ref class GameMain : public DirectXBase
{
internal:
delegate void SubFrameFuncDelegate(Windows::UI::Xaml::Controls::Page^ p);
.
.
void SetSubFrameFunc(SubFrameFuncDelegate^ func)
{
subFrameFunction_ = func;
}
.
.
private:
SubFrameFuncDelegate^ subFrameFunction_;
.
.
.
};
.
.
.
.
MainPage::MainPage(GameMain^ g) : gameMain_(g)
{
InitializeComponent();
//std::function<void (Windows::UI::Xaml::Controls::Page^ )> f(std::bind(&MainPage::Subframe,this,std::placeholders::_1));
gameMain_->SetSubFrameFunc(ref new GameMain::SubFrameFuncDelegate(this,&MainPage::Subframe));
}
void MainPage::Subframe(Windows::UI::Xaml::Controls::Page^ p)
{
}
当初書きたかった形に落ち着いたね..。