我有这样的代码:
class RetInterface {...}
class Ret1: public RetInterface {...}
class AInterface
{
public:
virtual boost::shared_ptr<RetInterface> get_r() const = 0;
...
};
class A1: public AInterface
{
public:
boost::shared_ptr<Ret1> get_r() const {...}
...
};
此代码无法编译。
在视觉工作室它提高
C2555: 重写虚函数返回类型不同,也不是 协变体
如果我不使用 boost::shared_ptr
而是返回原始指针,代码就会编译(我知道这是由于 C + + 中的 协变返回类型协变返回类型)。我可以看出问题是因为 Ret1
的 boost::shared_ptr
不是从 RetInterface
的 boost::shared_ptr
派生出来的。但是我想返回 Ret1
的 boost::shared_ptr
,以便在其他类中使用,否则我必须在返回之后强制转换返回的值。