Наследующие конструкторы работают только частично

У меня есть следующий класс, написанный так, чтобы работать полностью, независимо от того, какой 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();
}

Я хотел создать подкласс, который на самом деле почти такой же, за исключением перегруженного typedef:

class B : public A
{
private:
    typedef float mDataType;
public:
    using A::A;
    using A::operator=;
};

Я хотел добиться того, чтобы создать класс B, то есть: - идентичный A - имеет все функции As (есть несколько функций-членов в A, которые я не писал) - имеет все операторы As - имеет все из конструкторов As - имеет другой typedef - имеет тот же деструктор

Мой код не работает, потому что я не могу вызвать B(void*, uint32, uint32, size_t), что я и хочу. (Intellisense показывает мне только B() и B(const B&) в качестве доступных конструкторов).

2 ответа

Решение

Наследование конструкторов поддерживается только начиная с 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>;
Другие вопросы по тегам