C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

Boost.GILでpng書きだそうと思ったらライブラリーにdefine足りて無いよメモ

と、いうわけで、

Issue 8 -
gilviewer -

Boost:GIL / LibPNG 1.4; ‘int_p_NULL’ was not declared in this scope -
GilViewer - Google Project Hosting

で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が美しくない…。こういうのはライブラリーの中でバッファーされるべきなので修正はよ(´・ω・`)