我有一个包含一些数据结构的基类,和含有完全相同数据,但赋有一些额外的功能,比如(为明确起见)一些派生类:C++类具有相同的数据结构
struct Derived : public std::vector<double>
{
// Constructors, define or inherit
using std::vector<double>::vector;
double norm() const;
}
现在在代码的另一部分中,我想调用基类型为std::vector<double>
的对象obj
的函数norm()
。通常,这是没有意义的,但在这里:
Derived
可以从它的底座(构造用使用申报进口中的例子)来构建,Derived
和ITSS基地有着完全相同的数据成员。
我可以打电话:
Derived(obj).norm()
,但我想,以避免不必要的副本。
有没有一种方法可以简单安全地重新解析具有相同底层数据结构的对象?或者,也许设计模式为着装具有(相当大的)功能集的数据结构可以完全避免该问题?
你可以使用'static_cast',但这将是严重类型不安全。这味道像一个XY问题。你试图解决什么样的实际问题。不,不是问题中提到的问题,而是你认为的答案涉及问题中提到的怪异类结构。 –
你不应该从std容器派生,因为它们缺少某些你可能需要的程序不会崩溃的特性,比如虚拟析构函数。 has_a受保护的向量成员可能会更好。为了避免这种情况,你必须不要做某些你应该能够自由地使用你的类设计的东西,或者通过增加运行时开销到标准库来瘫痪整个世界的C++代码库。 –