У меня есть класс шаблона следующим образом:, специализирующийся класс шаблона для указателей
template <typename T>
class PacketMember
{
public:
PacketMember(const std::size_t maxMemberSize, const QString memberName) :
m_maxMemberSize(maxMemberSize),
m_memberName(memberName)
{
}
void append(const T data, const std::size_t length)
{
if(currentMemberSize() + length <= m_maxMemberSize)
{
for(std::size_t i = 0 ; i < length ; ++i) {
m_data = data;
m_member.push_back(m_data);
}
}
}
QString memberName() const
{
return m_memberName;
}
std::size_t currentMemberSize() const
{
return m_member.size();
}
std::size_t maxMemberSize() const
{
return m_maxMemberSize;
}
std::vector<T>* member() const
{
return m_member;
}
void setMaxMemberSize(const std::size_t newSize) {
m_maxMemberSize = newSize;
}
private:
T m_data;
std::vector<T> m_member;
std::size_t m_maxMemberSize;
QString m_memberName;
};
и специализация для указателей следующим образом:
template <typename T>
class PacketMember<T*>
{
public:
PacketMember(const std::size_t maxMemberSize, const QString memberName) :
m_maxMemberSize(maxMemberSize),
m_memberName(memberName)
{
}
void append(T* data, const std::size_t length)
{
if(currentMemberSize() + length <= m_maxMemberSize)
{
for(std::size_t i = 0 ; i < length ; ++i) {
m_data = new T(*data);
m_member.push_back(m_data);
}
}
}
QString memberName() const
{
return m_memberName;
}
std::size_t currentMemberSize() const
{
return m_member.size();
}
std::size_t maxMemberSize() const
{
return m_maxMemberSize;
}
std::vector<T*>* member() const
{
return &m_member;
}
private:
T* m_data;
std::vector<T*> m_member;
std::size_t m_maxMemberSize;
QString m_memberName;
};
, когда я пытаюсь создать экземпляр моего класса в char*
с PacketMember<char*>
его создает класс PacketMember<cha**>
. почему это происходит? как я должен избегать создания указателя на указатель? Извините, если это основной вопрос. У меня очень ограниченный опыт работы с шаблонами.
EDIT:
Там не было ничего плохого с моим кодом. Проблема была всего лишь ошибкой в QtCreator. Должен ли я удалить этот вопрос? ответьте в комментариях. Спасибо.
Можете ли вы опубликовать свою реализацию? – Samer
@Samer реализация чего? если вы имеете в виду функции класса, то это шаблон, который находится в файле заголовка. – Barracuda
как вы создаете экземпляр объекта класса? – Samer