Каков наилучший способ заставить побитовую функцию работать для любого типа целочисленного ввода c ++? - PullRequest
1 голос
/ 12 июля 2010

Так что мне нужно прочитать флаги в битах и ​​установить флаги в битах.Эти биты имеют различные целочисленные размеры: int16, int32, int64 и т. Д.

Я хотел бы иметь функцию, которая делает что-то вроде этого:

static integertype function(integertype data, char startbit, char endbit);

Я не хочукодировать то, что будет одним и тем же кодом для изоляции битов для целых чисел разных размеров в отдельных, но идентичных функциях (для множества битовых функций, которые я хочу написать).

Я думал об использовании указателя void дляданные, чтобы все могло проходить через одну функцию.Это плохой дизайн?Как насчет эффективности?Я не имею представления о плохом / хорошем дизайне из-за моей неопытности.

static int function(void *data, char startbit, char endbit)

Эти флаги нужно рассматривать очень часто, так как это относится к системе сбора данных.Будет ли реализация пустого указателя разумно эффективной?

Я знаю, что преждевременная оптимизация - это плохо, но я хотел бы знать, какие вещи, как правило, менее или более эффективны, чем другие, чтобы принимать правильные решения.* Заранее спасибо, что отвезли меня в школу.

Ответы [ 2 ]

7 голосов
/ 12 июля 2010

Как правило, если вам нужна общая функциональность, вы используете шаблоны:

template <typename T>
T function(T data, char startbit, char endbit);

Но учтите, что у нас есть std::bitset.

5 голосов
/ 12 июля 2010

Почему бы не сделать это шаблонной функцией?

template<typename T>
static T foobar(T data, char startbit, char endbit);
...