【问题标题】:does it makes sense a virtual template method?虚拟模板方法有意义吗?
【发布时间】:2011-10-02 06:46:00
【问题描述】:

假设这样的结构:

class Interface
{
public:
   template <typename T>
   virtual void reportOperationError(T code , std::string message) = 0;
};

我不明白这个东西的用例,在什么情况下它是有用的,以及如何?

如果您想知道,我在任何地方都没有看到此代码,只是想了解这是否有一些特殊用途

【问题讨论】:

    标签: c++ abstract-class virtual-functions


    【解决方案1】:

    这在 C++ 中是不合法的。成员函数模板不能是虚拟的,因为 VTable 的大小将取决于其他翻译单元中的实例化,这将使其非常非常难以编译器实现者。

    这会破坏 C++ 编译模型的全部意义,即单独编译。 C++ 翻译单元(AKA 源文件)必须是自给自足的才能被编译。如果允许成员函数模板,这几乎是不可能的

    【讨论】:

      【解决方案2】:

      无法将虚拟成员函数设为模板。无论其潜在用途如何,此代码都不会编译。

      【讨论】:

      • 是的。有趣的是,虽然模板编译错误通常非常难以理解,但 gcc 在遇到上述代码时生成的错误信息却非常清晰:error: templates may not be 'virtual'
      【解决方案3】:

      模板化的成员函数不能是虚函数...函数的每个实例化都会向虚表添加另一个条目,编译器必须检查所有代码才能创建虚表。因此,无论它是否有用,它都不是合法的 C++。

      【讨论】:

        猜你喜欢
        • 2016-09-28
        • 2011-12-19
        • 2014-10-25
        • 1970-01-01
        • 2011-11-28
        • 2021-06-16
        • 2012-10-08
        • 1970-01-01
        相关资源
        最近更新 更多