继承构造函数仅部分起作用

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&) 作为可用的构造函数)。

继承构造函数是only supported since VC++2014 CTP 1

看来你想要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>;