Làm cách nào để chuyển một tham số mẫu vào một hàm meta (tức là không phải mẫu chức năng)?Chuyển std :: integer_sequence làm tham số mẫu thành hàm meta
Ví dụ: trường hợp sử dụng sau đây (nhưng không giới hạn trong trường hợp này):
Tôi muốn sử dụng trình tự số nguyên để xóa các loại N
cuối cùng khỏi gói tham số. Tôi nghĩ rằng tôi có thể sử dụng selector
từ this SO question, nhưng tôi không vượt qua chuỗi số nguyên để chức năng meta này.
#include <tuple>
#include <utility>
template <typename T, std::size_t... Is>
struct selector
{
using type = std::tuple<typename std::tuple_element<Is, T>::type...>;
};
template <std::size_t N, typename... Ts>
struct remove_last_n
{
using Indices = std::make_index_sequence<sizeof...(Ts)-N>;
using type = typename selector<std::tuple<Ts...>, Indices>::type; // fails
};
int main()
{
using X = remove_last_n<2, int, char, bool, int>::type;
static_assert(std::is_same<X, std::tuple<int, char>>::value, "types do not match");
}
biên dịch lỗi
main.cpp:15:55: error: template argument for non-type template parameter must be an expression
using type = typename selector<std::tuple<Ts...>, Indices>::type; // fails
^~~~~~~
main.cpp:5:38: note: template parameter is declared here
template <typename T, std::size_t... Is>
Làm thế nào tôi có thể vượt qua các dãy số nguyên?
nhanh không thể tin được! –