プログラミング生放送勉強会 第15回@大阪行ってきた!!

今日はプログラミング生放送勉強会 第15回@大阪へ行って来ました!
IndexedDBやらMetroの話やらGCの話やらいろいろ勉強になりました。

「そこでのじゃんけん大会で運良く勝利し、ARCキーボードを頂きました。本当にありがとうございました。」【重要】

もちろん懇親会も行って来ましたが、いろいろな人と話ができてよかったです。
年齢差関係なく、皆さん楽しめると思います!(学生も結構な数いました。
自分も年が倍近く離れている人や同い年の人といった人と気軽にトークを交えることができました。
なかには前から知ってたけど合うのは初めての人もいました。

次回参加するときはLT出来るぐらいのネタをたくさん持てたらいいなと思います。
モチベーションも上がって、本当に楽しかったです。
なのでみなさんも参加してみるといいかなと思います。

次回は名古屋ですかね(超会議もあった気がする)・・・行けそうにないので、半年ぐらい後の大阪のやつには参加する予定です。
そのときはまたよろしくお願いします。

ではでは・・・

※写真がないのは楽しみすぎて全然撮ってなかったからですorz

参考URL:http://pronama.wordpress.com/2012/04/14/2012-pronama/
    

luabindでboost::shared_ptrを使う

少し考えさせられたのでメモ。

class Hoge
{
public:
	void show()
	{
		std::cout << "Hello World" << std::endl;
	}
};

int main()
{
	std::shared_ptr<lua_State> l( lua_open(), []( lua_State* p ) { lua_close( p ); } );
	luaL_openlibs( l.get() );
	luaopen_base( l.get() );
	luabind::open( l.get() );

	luabind::module( l.get() )
	[
		luabind::class_<Hoge, boost::shared_ptr<Hoge>>( "Hoge" )
		.def( "show", &Hoge::show )
	];
	boost::shared_ptr<Hoge> p( new Hoge() );
	luaL_dofile( l.get(), "test.lua" ); // エラー出た時の対処とかは略してます
	luabind::call_function<void>( l.get(), "exec", p );
}
-- test.lua
exec = function( hoge_ptr )
	hoge_ptr:show();
end

実行結果

Hello World

これで動いたことは動いたんですが、TR1のほうのshared_ptrだとどう書くかわからなかったので、分かり次第追記します。

【追記】std::shared_ptrの場合。

template<class T>
T* get_pointer(std::shared_ptr<T> const& p) { return p.get(); }

を追加すれば、動作しました。とある方に教えていただきました。
一応、資料をここに示しておきます。

get_pointer() overloads are provided for the smart pointers in Boost, 
and std::auto_ptr<>. Should you need to provide your own overload, 
note that it is called unqualified and is expected to be found by argument dependent lookup. 
Thus it should be defined in the same namespace as the pointer type it operates on.

他に、luabindのソースを自分で編集すればできるそうですが、怖くてできないのでやめましたorz