C++ 有没有一种方法可以在没有模板的情况下使用STL迭代器作为参数?

C++ 有没有一种方法可以在没有模板的情况下使用STL迭代器作为参数?,c++,templates,iterator,virtual-functions,C++,Templates,Iterator,Virtual Functions,我有一个类a,它实现了一个函数foo,该函数将两个迭代器(来自任何stl容器)作为参数。就我所见,常用的方法是使用模板,如下所示: class A{ public: template <typename It> void foo(const It& begin, const It& end){ // do stuff } }; 因为这会将foo在单个对象中的使用限制为一种容器 我的问题是

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

class A{
    public:
        template <typename It>
        void foo(const It& begin, const It& end){
            // do stuff
        }
};
因为这会将
foo
在单个对象中的使用限制为一种容器

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

编辑

也许这是评论中提到的XY问题,所以我将解释具体问题,看看您的想法

我有一个名为
LightSource
的抽象类,它有一个纯虚函数
void castLight(…)=0
。有两个类继承自它并实现该函数,
RadialLight
DirectedLight


问题是,要投射灯光,我需要一组对象
Edge
,它们指定2D世界中可能投射阴影的部分。对于
castLight
中的算法,我需要迭代该集合(不一定全部),并在每种灯光中执行不同的处理。

您可以使用特定的迭代器类型,例如
std::vector::iterator
。请注意,这可能不同于
std::vector::const_iterator
std::deque::iterator
std::vector::iterator
,因此可能会导致大量重载


您还可以使用类型擦除迭代器,例如来自任何范围的迭代器或
任何范围的迭代器本身。

有一些难看的解决方法,尽管这有XY问题的味道。模板是编译时多态性的一种形式。虚拟函数是运行时多态性。也许你可以问一下如何解决你认为需要虚拟模板函数的问题?@fabian这看起来是个不错的方法,但我不确定它是否适用于这种情况。我将对这个问题进行编辑,使其更具体地说明问题集合是什么?如果要“限制”,应该能够使用:void foo(std::vector::const_迭代器begin…)到特定集合的迭代器。注意:您不希望在迭代器之前使用const,您很可能需要const_迭代器。@Zlatomir我会考虑这一点,谢谢。我想我必须将迭代器限制到特定集合…所以唯一的方法是限制容器的类型和重载…好的,谢谢!
template <typename It>
class A{
    public:
        void foo(const It& begin, const It& end){
            // do stuff
        }
};