Вы можете использовать std::transform
, который затем выполняет итерации для вас, как я сделал здесь:
#include <iostream>
#include <array>
#include <algorithm> // std::transform
#include <functional> //std::bit_or
typedef std::array<uint64_t, 2 > MyType;
int main()
{
MyType instance1 { 11, 22 };
MyType instance2 { 33, 44 };
MyType output {0, 0};
std::transform(output.begin(), output.end(), instance1.begin(), output.begin(), std::bit_or<uint64_t>());
std::transform(output.begin(), output.end(), instance2.begin(), output.begin(), std::bit_or<uint64_t>());
for(int i = 0; i < 2; ++i) std::cout << output[i] << std::endl;
}
Демонстрация: http://www.cpp.sh/94cs4
Примечание что я считаю ваш оригинальный код более читабельным, чем этот. Я бы использовал std::transform
только в более сложных ситуациях.
Тем не менее, что вы на самом деле пытаетесь решить?
Если вы ищете удобство простых компонентных операций, как можно найти, например, в Matlab, а не в моих знаниях. Вы можете написать свой собственный контейнерный класс, подобный std::vector
и std::array
, и иметь определенные операторы, такие как |
в вашем случае, для работы с ними.