Должны ли быть предоставлены варианты функций для всех целочисленных типов? - PullRequest
0 голосов
/ 10 февраля 2012

Я работаю с функцией в библиотеке C, которая принимает число в качестве параметра.В настоящее время это означает, что у меня есть две версии: одна для double и одна для int.

Какие версии функций следует указывать для числовых типов?

Это часто встречается встандартные библиотеки, но они не достаточно согласованы, чтобы использовать руководство, например, atof, atol и atoi - это один набор, а strtod, strtol, strtoul - это другой набор и abslabs - третий.Это три разных набора, с разными схемами именования в одном заголовочном файле.

Редактировать:

Это не для одноразового использования, и я не знаю, какие варианты нужны.

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

Ответы [ 3 ]

3 голосов
/ 10 февраля 2012

Вам нужны дополнительные варианты функций?

Я подозреваю, что с учетом того, что этот вопрос нужно задать, у вас есть требование только для double и int, ваших двух функций. Если у вас действительно есть потребность в поддержке, например, double complex, создайте специализированную функцию для этого.

1 голос
/ 10 февраля 2012

Реализуйте его как шаблоны функций C ++ и добавьте обертку C, чтобы при необходимости поддержки, скажем, long long или long double, вы просто добавили еще одну обертку C, ваши алгоритмы C ++ остались без изменений помните детали.

1 голос
/ 10 февраля 2012

Чтобы ответить на этот вопрос, я думаю, нам нужно больше узнать о том, что делают рассматриваемые функции. Как правило, я бы предоставил не более одной версии с плавающей запятой и одной целочисленной версии, если только это не критично для производительности, чтобы получить преимущество работы с меньшими типами. int действительно плохой выбор. Я бы использовал long, long long, intmax_t или uintmax_t в зависимости от того, хотите ли вы поддерживать C89, ваших соглашений об использовании типов в проекте и требований подписи. Или вы можете создать свой собственный тип mylib_intarg, который позволит вам изменить используемый базовый тип, но пожалуйста ради здравомыслия не поощряйте пользователей вашей библиотеки объявлять переменные с этими уродливыми типами. Вместо этого просто сделайте их типом аргумента для функции, чтобы вызывающая сторона использовала все типы переменных, которые являются естественными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...