【发布时间】:2016-03-10 04:02:24
【问题描述】:
从here 可以看出,并非所有模板函数都在模板类中编译。标准说,如果方法或成员没有被使用,它就没有被编译。很酷的功能,确实!现在,让我们讨论以下层次结构:
class A
{
virtual void f() {};
};
template <typename T>
class B : public A
{
virtual void f () override
{
// do something dangerous
}
}
你永远不会知道B<int>::f 是否被调用,对吧?原因是您可以使用动态绑定调用函数B::f,而您永远不知道A* 是指向B 类型对象还是从A 派生的其他类型对象。那么编译器应该如何处理这种情况呢?
A* ptr = nullptr;
if (i > 0)
{
ptr = new B<int>();
}
ptr->f();
编译器如何猜测/发现这种情况以生成B<int>::f
重要的相关问题: Can a C++ class member function template be virtual?
【问题讨论】: