Я нашел грязный хак, который может помочь вам добиться подобного поведения. Это требует, чтобы вы определили символ компиляции _WIN64
для ваших 64-битных сборок, а затем вы можете сделать следующее:
#if _WIN64
using size_t = UInt64;
#else
using size_t = UInt32;
#endif
Примечание: вам придется использовать приведенный выше код в каждом файле, который хочет использовать тип size_t
.
Вы также можете определить свой собственный целочисленный тип (во многом аналогично тому, как определен UInt64) и использовать его повторно, не помещая приведенный выше код в каждый файл, которому требуется доступ к size_t
, но это очень сложно (imho).
#if _WIN64
using _size_t = UInt64;
#else
using _size_t = UInt32;
#endif
[Serializable]
[CLSCompliant(false)]
[ComVisible(true)]
public struct size_t : IComparable, IFormattable, IConvertible, IComparable<_size_t>, IEquatable<_size_t>
{
private _size_t _value;
public size_t(_size_t val)
{
_value = val;
}
// You have to add all of your overloads below
}
Это позволит size_t
изменять его тип в зависимости от платформы, но корректно перегрузить необходимые операторы очень сложно!