Tôi muốn chuyển đổi một số std::array
sang một số khác std::array
, nhân mỗi phần tử của nó với một số cụ thể.Nhân mỗi phần tử của mảng std :: tại thời gian biên dịch
Những gì tôi đã ngay bây giờ rõ ràng là không hoạt động:
#include <array>
#include <iostream>
#include <utility>
template <class T, size_t... Is, size_t N>
constexpr std::array<T, N> multiply(std::array<T, N> const &src,
std::index_sequence<Is...>) {
return std::array<T, N>{{src[Is]...}}; // How can I multiply each of src's elements?
}
int main(int argc, char *argv[]) {
constexpr std::array<int, 3> arr = {1, 2, 3};
constexpr auto t = multiply(arr, std::make_index_sequence<3>{});
for (auto &el : t) std::cout << el << std::endl;
return 0;
}
Câu hỏi của tôi là: làm thế nào tôi có thể lặp qua mỗi phần tử tại thời gian biên dịch hoặc làm thế nào tôi có thể áp dụng các chức năng tương tự (trong trường hợp của tôi: nhân 2) tại thời gian biên dịch?
như thế nào '{{mult (src [là], src [là]) ...} 'làm việc bán chính xác ? '...' là một chút bối rối trong trường hợp này. – syntagma
@REACHUS Đây là một trong những cách bạn có thể mở rộng gói. Chờ tôi sẽ cố gắng giải thích. – 101010
Cảm ơn, một câu hỏi nữa: liệu có cách nào để thay thế 'mult' bằng lambda? Tôi đã thử nó nhưng có vẻ như nó sẽ không thể, vì lambdas không thể là 'constexpr'. – syntagma