Как следует из названия, TBitArray<> не имеет точного типа, значит ли это, что этот метод может принимать любые параметры, такие как TBitArray<int32>, TBitArray<float>, ... в качестве параметров?
FORCEINLINE bool HasAll(const TBitArray<>& Other) const
{
FConstWordIterator ThisIterator(*this);
FConstWordIterator OtherIterator(Other);
while (ThisIterator || OtherIterator)
{
const uint32 A = ThisIterator ? ThisIterator.GetWord() : 0;
const uint32 B = OtherIterator ? OtherIterator.GetWord() : 0;
if ((A & B) != B)
{
return false;
}
++ThisIterator;
++OtherIterator;
}
return true;
}
И какая разница с этим кодом
template<class T>
FORCEINLINE bool HasAll(const TBitArray<T>& Other) const





TBitArray<> — это класс шаблона со всеми параметрами шаблона по умолчанию. Если это TBitArray<int32> или TBitArray<float>, зависит от определения шаблона.
Вот его определение:
template<typename Allocator = FDefaultBitArrayAllocator>
class TBitArray;
Итак, это не int32 и не float, это распределитель массива по умолчанию.
Если параметр шаблона ожидает распределитель, то как вообще могут работать такие типы, как TBitArray<int32> и TBitArray<float>?
@RemyLebeau Они не могут работать, это предположения ОП, но они недействительны.
Итак, теперь я вижу из документации Unreal, что TBitArray — это просто динамический массив битов, и вы не можете создать экземпляр типа, такого как TBitArray<int32> или TBitArray<float>, во-первых. Понял, спасибо
значит ли это, что этот метод может принимать любые параметры, такие как
TBitArray<int32>,TBitArray<float>, ... в качестве параметров?
Нет.
Из определения класса TBitArray:
template<typename Allocator = FDefaultBitArrayAllocator>
class TBitArray;
Вы можете видеть, что его аргумент шаблона принимает тип Allocator и по умолчанию имеет значение FDefaultBitArrayAllocator. Итак, TBitArray<> — это просто сокращение от TBitArray<FDefaultBitArrayAllocator>.
на всякий случай... если вы знаете java-дженерики, это не похоже на них.