У меня есть следующий класс, написанный так, чтобы работать полностью, каким бы ни было 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 - имеет все Как конструкторы - имеют разные typedef - имеют одинаковый деструктор
Мой код не работает, потому что я не могу вызвать B(void*, uint32, uint32, size_t), чего я и хочу. (Intellisense показывает мне только B() и B(const B&) в качестве доступных конструкторов).
mData
по-прежнему являетсяstd::vector<uchar>
, и что все случаи использованияmDataType
в базовом классе относятся кuchar
, независимо от того, что такоеmDataType
в подклассе? - person molbdnilo   schedule 18.08.2015