返回与C++中的类相同的类型
Return same type as class in C++
我想要一个C++类方法来返回对同一类对象的引用。这也适用于派生类。在下面的例子中,我只是简单地将"A*"作为函数的返回类型,但当使用类B时,这显然是一个问题。
class A {
public:
A* self() { return this; };
};
class B: public A {
};
int main(int argc, char **argv) {
A* a1 = new A;
B* b1 = new B;
A* a2 = a1->self();
B* b2 = b1->self();
}
编译器抱怨
class.cpp:在函数"int main(int,char**)"中:class.cpp:16:错误:
从"A*"到"B*"的转换无效
在Objective-C中,我会使用instanceof
特殊类型作为返回类型。对于这样的问题,有什么类似于C++或任何已知模式的用法吗?
我想您需要"返回类型放松"(注意virtual
):
struct A {
virtual A* self() { return this; };
};
struct B: A {
B* self() { return this; };
};
你也可以考虑这个问题此语言功能专门针对类的并行层次结构(clone
是特殊情况)
转换确实无效。对于这样的转换,您需要投射:
B* b2 = static_cast<B*>( b1->self() );
但正确的方法是通过适当的设计或重构来避免陷入这种情况。
相关文章:
- 如何在模板参数中分离函数类型返回类型和参数
- 为什么要为指针返回类型返回一系列字符?
- 有没有办法根据运行时值的类型返回 constexpr 对象
- 从弱指针返回类型返回共享指针
- 无法为unique_ptr返回类型返回 nullptr
- 为什么双重类型返回无穷大
- std::is_arithmetic 为通用 lambda 中的 int 类型返回 false:未定义的行为?
- C 策略设计具有可变类型返回值
- 根据类型返回一个值
- 在C++中,将double转换为long的类型返回了不正确的值
- 作为宏参数的安装类型返回错误:字符串常量之前的预期非限定 id
- 具有引用类型返回的函数
- C++ 如何使模板<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr
- C++模板:按类型返回值
- 以Integer返回类型返回浮点值
- 使用 C++14 的自动功能类型返回扣除代替 std::common_type 是否始终安全?
- 为什么允许新运算符向每个指针类型返回*void
- 适当的函数返回类型返回日期时间
- c++中布尔类型返回函数的默认返回值
- 在c#中使用非托管c++代码对所有double类型返回0