c++ - 覆盖专用模板

标签 c++ templates boost boost-gil

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

有什么方法可以覆盖模板的特化,以便无论对 convert_pixel() 的哪个内部调用都将使用新的基于 LCMS 的 convert_pixel()

最终答案

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

最佳答案

我对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; }

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

关于c++ - 覆盖专用模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10488041/

相关文章:

c++ - 运算符(operator)填写的模板

c++ - 如何将非静态成员函数用于模板参数?

c++ - C++20 NTTP 和类型之间的转换

c++ - 了解 tagVARIANT 结构

c++ - 我是否在 WinApi 中正确执行动画?

c++ - 为什么使用引用作为迭代器

c++ - 在类中使用 boost::numeric::odeint

c++ - 带有字符串定界符或两个字符的 fstream

c++ - 我如何用 C++ 解析 json 数组?

c++ - 具有 BOOST/CSTDINT 类型的 BOOST 稀疏 vector 数组;失败,为什么?