У меня есть класс, который имеет:преобразования типа указателя в назначении
private:
uint32_t *data;
и тому в одной из функций, которые я делаю:
void foo() {
data = new uint32_t[size];
}
и работает нормально. Теперь я хотел бы сделать его немного более гибким, так что я хотел сделать Foo() шаблон:
template<typename T>
T foo() {
data = new T[size];
}
и я пытаюсь использовать его:
class.foo<uint64_t>();
Но компиляция не может сказать, что:
error: cannot convert 'long long unsigned int*' to 'unsigned int*' in assignment
Возможно ли это сделать? Я попытался объявить
void *data;
и компилируется, но я не могу сделать
sizeof(data[1]);
, который, по существу, поэтому мне нужно передать тип.
EDIT:
Спасибо за ваши ответы, есть несколько вещь, которую я хотел бы добавить, посмотрев на ваши ответы.
- Я использую необработанный указатель вместо контейнера, потому что он работает с памятью, которая также используется внешним оборудованием (я не запускаю это на ПК).
- Использование этой памяти необязательно для этого класса, поэтому я не хочу выделять ее, если она не нужна.
- Я использую этот класс в нескольких местах, где мне вообще не нужны * данные, поэтому я бы предпочел не сделать весь класс шаблоном.
Еще одна мысли: типа шаблона по умолчанию может быть хорошим компромиссом, есть способ, чтобы создать класс, который я не должен буду позже использовать этот путь:
Class<> my;
но еще:
Class my;
и при необходимости:
Class<type> my;
?
насчет T * данные? – snr
Вам нужно преобразовать указатель-член в 'T *' – midor