C++不允许我构造SymIntPoly类型的对象并对其调用f()。下面是类和结构。
template<typename T>
struct SymPoly
{
T f() { return this->x; }
};
struct IntPoly
{
int x;
virtual int f() = 0;
};
struct SymIntPoly : public IntPoly, public SymPoly<int>
{
};我不了解编译器,但我觉得编译器不会将这两个函数视为相同的函数(即,它们不具有相同的内部签名?)
我尝试做的另一种方式是什么?
发布于 2016-07-07 20:59:23
你对那个可怜的编译器要求太多了。如果它开始允许这种事情,情况可能会变得非常模糊。
幸运的是,帮助它找出你想要的并不难。试试像这样的东西
template<typename T>
struct SymPoly
{
virtual T getX() =0;
T f() { return getX(); }
};
struct IntPoly
{
int x;
virtual int f() = 0;
};
struct SymIntPoly : public IntPoly, public SymPoly<int>
{
int getX() { return IntPoly::x; }
int f() { return SymPoly<int>::f(); }
};这段代码会编译。
https://stackoverflow.com/questions/38245530
复制相似问题