覆盖专门的模板

时间:2012-05-07 19:38:39

标签: c++ templates boost boost-gil

我一直在使用Boost.GIL执行一些基本的图像处理程序。在Boost.GIL中,通过通用convert_pixel( )函数的模板特化来实现不同类型的像素之间的颜色空间转换。 但是,我想用基于LCMS的东西来覆盖这些实现,例如。

有没有办法覆盖模板的特化,以便对convert_pixel()的内部调用将使用新的基于LCMS的convert_pixel()

最终的aswer

深入研究GIL设计手册(比教程更有趣),我发现Adobe建议如何解决这个问题。对于我们感兴趣的人,此链接提供了答案:http://www.boost.org/doc/libs/1_49_0/libs/gil/doc/html/gildesignguide.html#NewColorConversionDG

2 个答案:

答案 0 :(得分:0)

我不熟悉GIL,我在文档中发现只有类似的功能。但是,可能不需要回答这个问题。

劫持原始呼叫,您应该能够覆盖转换。函数优先级应该来节省日期:普通函数总是优先于模板函数。假设原始模板专业化是

template<> 
GIL_FORCEINLINE void boost::gil::copy_and_convert_pixels (const V1 &src, const V2 &dst, CC cc) { original_code; }

您可以覆盖此定义自定义非模板函数

GIL_FORCEINLINE void boost::gil::copy_and_convert_pixels (const V1 &src, const V2 &dst, CC cc) { overridden_code; }

您应该特别注意将函数定义到具有相同名称的同一名称空间,并在第一次调用之前包含它。

答案 1 :(得分:0)

FWIW,请参阅覆盖boost::gil::color_convert的{​​{3}},以便通过GIL尚未提供的转化扩展 boost::gil::copy_and_convert_pixels行为。

我认为您在尝试替换 GIL this answer for an example中定义的现有转化时会遇到问题;可能你想要/需要关注的路线是定义一个新的颜色基础c.f rgb_t,cmyk_t(例如lcms_t?)然后定义像default_color_converter_impl<rgb_t,lcms_t>这样的东西来与它互操作。