Boost.GILでpng書きだそうと思ったらライブラリーにdefine足りて無いよメモ
boost1.49つこうてるけど発症した > Issue 8 - gilviewer - Boost:GIL / LibPNG 1.4; ‘int_p_NULL’ was not declared in this scope code.google.com/p/gilviewer/is…
— 莉煎・優曇華院・因幡(実際うさぎ)さん (@USAGI_WRP) 6月 1, 2012
と、いうわけで、
で2010年に報告されパッチられ、その後2012年の2月に「define追加しないとダメじゃん」というコメントが追加されている。どうやらboost 1.49でもこのぷちトラブルは残ったままらしく美しくboostできない事件が発生した。
先にリンクしたIssueではC++では無くレガシーなC言語風のdefine内容になっているけど、それも気に入らないので少しでも醜くない様にC++11風かつ要らなくなったらdefineはundefしましょうって事で、
#include <boost/gil/gil_all.hpp> #define int_p_NULL nullptr #define png_infopp_NULL static_cast<png_infopp>(nullptr) #define png_bytep_NULL static_cast<png_bytep>(NULL) #include <boost/gil/extension/io/png_io.hpp> #undef png_infopp_NULL #undef png_bytep_NULL #undef int_p_NULL
…美しくない(´・ω・`)
せめてCPPにスコープとRAII的な何かがあればundef…いやそもそもこのdefineが美しくない…。こういうのはライブラリーの中でバッファーされるべきなので修正はよ(´・ω・`)