无法专门化来自另一个命名空间的模板

unable to specialize template from another namespace

本文关键字:命名空间 另一个 专门化      更新时间:2023-10-16

我已经退出了opencv,当我试图在我的命名空间内修改一次专门化的模板代码时,我得到了错误:

make -k 
[100%] Building CXX object object_detection.cpp.o
In file included from object_detection.cpp:1:0:
object_detection.h:370:75: error: specialization of 'void cv::Ptr<_Tp>::delete_obj() [with _Tp = CvHaarClassifierCascade]' in different namespace [-fpermissive]
object_detection.h:370:30: error:   from definition of 'void cv::Ptr<_Tp>::delete_obj() [with _Tp = CvHaarClassifierCascade]' [-fpermissive]

我明白,我不应该能够在不同的命名空间专门化模板代码,但有出路吗?

  1. 重新打开他们的命名空间,并专攻它。
  2. 对于函数,如果它忠实地通过ADL使用,则在参数的命名空间中创建覆盖。
  3. 检查源模板是否使用了trait类或其他类似的可以拦截的技术。