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>
{
};
我不知道编译器,但我觉得编译器不会将这两个函数视为相同的函数(即它们没有相同的内部签名?)
我正在尝试做的另一种方式是什么?
答案 0 :(得分:0)
你问了很多糟糕的编译器。如果它开始允许那些事情,情况可能变得非常模糊。
幸运的是,帮助它弄清楚你想要什么并不困难。尝试像
这样的东西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(); }
};
编译。