2015-11-30 2 views
1

В соответствии с Eigen documentation, вторым и третьим аргументами шаблона, которые соответствуют количеству строк и столбцов, как ожидается, будет int.Eigen :: Matrix | Почему eigen ожидает int, а не size_t?

Мне интересно, почему эти аргументы не являются size_t? Единственная причина, по которой есть int, есть, когда собственный разрешит иметь отрицательное число строк или столбцов?

Единственная причина, по которой это может иметь смысл, - это из-за Eigen::Dynamic. Может ли кто-нибудь подтвердить, что это причина, позволяющая отрицательные значения для строк/столбцов?

+1

Возможно, возможно, нет - возможно, вам следует попросить авторов библиотеки. Я бы сказал, что это 'int', потому что' Eigen :: Dynamic' является 'int', что является отрицательным значением со специальным значением в библиотеке. Но опять же, это действительно не объясняет выбор 'int', они могли бы легко сделать его' ssize_t', который является подписанной версией 'size_t'. –

+1

Для больших матриц лучше использовать динамический, чем огромный фиксированный размер. Использование неподписанных типов для чего-либо, кроме битовых полей или бигнома, не рекомендуется. –

+1

@ FilipeGonçalves 'ssize_t' не является частью C++, а скорее POSIX, IIRC, диапазон - [-1 ... 2 * 10^15] или что-то в этом роде. Поскольку Eigen предназначен для кросс-платформы, у него нет этой опции. –

ответ

0

Eigen :: Dynamic не является причиной вообще, так как он может быть равен, например, numeric_limits<size_t>::max(), или тому же size_t(-1).

Я считаю, что это скорее потому, что целевая аудитория Eigen более удобна, используя int, а затем что-нибудь еще. Тогда, если вам не нравится этот выбор, вы можете использовать директиву препроцессора EIGEN_DEFAULT_DENSE_INDEX_TYPE, чтобы установить то, что, по вашему мнению, вам подходит, и столкнуться с последствиями ... :) Нет, серьезно, я бы хотя бы выполнил полный набор тестов Eigen перед тем, как использовать это.

Смежные вопросы