有没有办法在没有模板的情况下使用 STL 迭代器作为参数?

问题描述

我有一个 class A 实现了一个函数 foo,该函数将两个迭代器(来自任何 stl 容器)作为参数。就我所见,常用的方法是使用模板,如下所示:

class A{
    public:
        template <typename It>
        void foo(const It& begin,const It& end){
            // do stuff
        }
};

问题是我想让 foo 成为虚拟的,和 templates may not be virtual,但我不想有这样的类模板

template <typename It>
class A{
    public:
        void foo(const It& begin,const It& end){
            // do stuff
        }
};

因为这会将 foo 在单个对象中的使用限制为一种容器。

我的问题:有没有一种方法可以在不使用模板的情况下使用 STL 迭代器作为参数,这样可以使这些函数成为虚拟函数并使其与任何 STL 容器一起工作?

编辑

也许这是评论中所说的 XY 问题,所以我将解释具体问题以了解您的想法。

我有一个名为 LightSource 的抽象类,带有一个纯虚函数 void castLight(...) = 0。有两个类继承自它并实现了函数,RadialLightDirectedLight

问题是要投射光,我需要一组对象 Edge 来指定可能投射阴影的 2D 世界中的线段。对于 castLight 中的算法,我需要遍历该集合(不一定是所有集合)并进行某些处理,这些处理在每种光线中都不同。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)