我有这样的代码:
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,以便在其他类中使用,否则我必须在返回之后强制转换返回的值。