У меня есть класс, как это:Используйте шаблонный класс без шаблона
template<size_t MAX_SIZE>
struct Buffer{
size_t size;
char data[MAX_SIZE]; // this must be inside the struct itself
constexpr static size_t max_size = MAX_SIZE;
};
Мне нужно, чтобы иметь возможность пройти этот класс, чтобы функционировать, что не следует использовать шаблон, в настоящее время я делаю что-то вроде этого:
void process(size_t &size, char *data, size_t max_size);
int main(){
Buffer<1024> b;
process(b.size, b.data, b.max_size);
}
Есть ли лучший способ сделать то же самое? Я могу думать о базовом классе и передавать по ссылке, но он становится слишком сложным, чтобы быть правильным.
(Это не фактический код, пожалуйста, не обращайте внимания, если есть синтаксические ошибки.)
вы, вероятно, хотите избежать вопроса, но: почему процесс не разрешен для использования шаблона? что можно использовать и почему? – IceFire
хорошо вопрос. разум не на 100% ясен для меня - интуиция. размышляй об этом. Серьезно - я хочу, чтобы код процесса() находился в другом файле .o. – Nick
Ваша интуиция, вероятно, заключается в том, что вы также не хотите, чтобы процесс стал шаблоном. Это требует более глубокого мышления: наличие MAX_SIZE в качестве аргумента шаблона означает, что он определяет тип. Следовательно, процесс должен стать шаблоном для работы с несколькими различными типами. Если Buffer должен быть только точно одним типом, то MAX_SIZE не должен быть аргументом шаблона. – IceFire