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

У меня есть следующий класс, написанный так, чтобы работать полностью, независимо от того, какой 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, то есть:
— идентично А
— имеет все функции As (есть несколько функций-членов в A, которые я не написал)
— имеет все операторы As
— имеет все конструкторы As
— имеет другой typedef
— имеет тот же деструктор

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

4

Решение

Наследующие конструкторы поддерживается только с VC ++ 2014 CTP 1.

4

Другие решения

Кажется, что вы хотите 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>;
1

По вопросам рекламы [email protected]