Giả sử bạn có loại bộ dữ liệu và bạn muốn trích xuất gói thông số mẫu của nó để tạo mẫu khác. Nếu đó là mẫu loại, thì tôi có thể có tiện ích như sau:Mẫu biến mẫu?
template < typename Tuple, template <typename...> typename What >
struct PutTupleInT;
template < typename... Types, template <typename...> typename What >
struct PutTupleInT<std::tuple<Types...>, What>
{
using Result = What<Types...>;
};
Nhưng nếu mẫu mong muốn là mẫu biến thì sao? Trong khi template <typename...> typename What
là "trình giữ chỗ" cho mẫu loại, thì "trình giữ chỗ" cho mẫu biến là gì?
Tôi đã thử những điều sau đây cho clang-4.0.0 (trình biên dịch duy nhất lúc này hỗ trợ các tham số mẫu không kiểu với kiểu tự động), nhưng nó không thành công. Trên thực tế tôi không chắc chắn nếu điều này là một cú pháp chính xác cho C + + 17.
template < typename Tuple, template <typename...> auto What >
struct PutTupleInV;
template < typename... Types, template <typename...> auto What >
struct PutTupleInV<std::tuple<Types...>, What>
{
static constexpr auto value = What<Types...>;
};
Bạn không thể sử dụng 'decltype (vartempl)' và trích xuất loại biến mẫu, đó là những gì bạn quan tâm thực sự? – skypjack
@skypjack Xin lỗi, tôi thực sự không hiểu ý bạn là gì. – Vahagn