继承构造函数仅部分起作用
Inheriting constructors work only partially
我有以下 class,这样写,无论 typedef 是什么,都可以完全工作:
class A
{
protected:
typedef uchar mDataType;
std::vector<mDataType> mData;
uint32 mWidth;
uint32 mHeight;
friend class C;
public:
A();
A(void* data, uint32 width, uint32 height, size_t dataSize);
A(const A& other);
A(A&& other);
A& operator=(const A& other);
A& operator=(A&& other) = delete;
~A();
}
我想做一个 subclass,除了重载的 typedef:
实际上几乎是一样的
class B : public A
{
private:
typedef float mDataType;
public:
using A::A;
using A::operator=;
};
我想实现的是做一个classB,即:
- 与 A 相同
- 具有所有 As 函数(A 中有几个成员函数,我没有写过)
- 拥有所有 As 运营商
- 具有所有 As 构造函数
- 有不同的类型定义
- 具有相同的析构函数
我的代码不起作用,因为我无法调用 B(void*, uint32, uint32, size_t),这正是我想要的。 (Intellisense 只显示 B() 和 B(const B&) 作为可用的构造函数)。
看来你想要template
而不是继承:
template <typename T>
class Mat
{
private:
using DataType = T;
std::vector<T> mData;
uint32 mWidth;
uint32 mHeight;
friend class C;
public:
Mat();
Mat(void* data, uint32 width, uint32 height, size_t dataSize);
Mat(const Mat& other);
Mat(A&& other);
Mat& operator=(const Mat& other);
Mat& operator=(Mat&& other) = delete;
~Mat();
};
using A = Mat<uchar>;
using B = Mat<float>;
我有以下 class,这样写,无论 typedef 是什么,都可以完全工作:
class A
{
protected:
typedef uchar mDataType;
std::vector<mDataType> mData;
uint32 mWidth;
uint32 mHeight;
friend class C;
public:
A();
A(void* data, uint32 width, uint32 height, size_t dataSize);
A(const A& other);
A(A&& other);
A& operator=(const A& other);
A& operator=(A&& other) = delete;
~A();
}
我想做一个 subclass,除了重载的 typedef:
实际上几乎是一样的class B : public A
{
private:
typedef float mDataType;
public:
using A::A;
using A::operator=;
};
我想实现的是做一个classB,即: - 与 A 相同 - 具有所有 As 函数(A 中有几个成员函数,我没有写过) - 拥有所有 As 运营商 - 具有所有 As 构造函数 - 有不同的类型定义 - 具有相同的析构函数
我的代码不起作用,因为我无法调用 B(void*, uint32, uint32, size_t),这正是我想要的。 (Intellisense 只显示 B() 和 B(const B&) 作为可用的构造函数)。
看来你想要template
而不是继承:
template <typename T>
class Mat
{
private:
using DataType = T;
std::vector<T> mData;
uint32 mWidth;
uint32 mHeight;
friend class C;
public:
Mat();
Mat(void* data, uint32 width, uint32 height, size_t dataSize);
Mat(const Mat& other);
Mat(A&& other);
Mat& operator=(const Mat& other);
Mat& operator=(Mat&& other) = delete;
~Mat();
};
using A = Mat<uchar>;
using B = Mat<float>;