c++ - 成员模板函数不能是虚拟的 - 解决方法?

标签 c++ virtual-functions member-functions

我明白为什么 member template functions cannot be virtual ,但我不确定最好的解决方法是什么。

我有一些类似的代码:

struct Entity
{
    template<typename It>
    virtual It GetChildren(It it) { return it; }
};

struct Person : public Entity
{
    template<typename It>
    virtual It GetChildren(It it) { *it++ = "Joe"; }
};

struct Node : public Entity
{
    Node left, right;
    const char *GetName() { return "dummy"; }

    template<typename It>
    virtual It GetChildren(It it)
    {
        *it++ = left.GetName();
        *it++ = right.GetName();
        return it;
    }
};

显然,我需要动态调度。但考虑到这些类实际上非常大,我不想为整个类 制作模板。而且我仍然希望支持任何类型的迭代器。

实现此目标的最佳方法是什么?

最佳答案

如果支持任何类型的迭代器是您唯一想要的,您可以使用使用类型删除的迭代器。我认为在 Boost Sandbox/Vault 或 Adob​​e Labs 或其中之一中的某处实现了 any_iterator。这是 Google 的第一个结果:

http://thbecker.net/free_software_utilities/type_erasure_for_cpp_iterators/any_iterator.html

关于c++ - 成员模板函数不能是虚拟的 - 解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099877/

相关文章:

c++ - qt - 在父窗口/小部件类中初始化子小部件的目的是什么?

c++ - 读取一个值并使用它而不用声明一个额外的变量,就像在 Java 的 sc.next() 中一样

python - 在 Python 中传递 "pointer to a virtual function"作为参数

c# - 重载决议和虚拟方法

c++ - 将成员函数传递给另一个对象的成员函数C++

c++ - Sample Grabber 过滤数据中奇怪的垃圾行

c++ - 如何使用 zlib 支持构建 boost?

c++ - 'using' 关键字从多个虚拟继承函数中进行选择

c++ - 静态成员函数和线程安全