Tôi không nghĩ bạn có thể làm điều này nói chung cho một mẫu lớp tùy ý với sự kết hợp của các thông số loại và không phải loại.
Bạn có thể nhận được gần cho bộ cụ thể hơn về các thông số, nhưng tôi không biết cách nào để xử lý các trường hợp chung:
#include <type_traits>
template <typename T, std::size_t N>
class MyClass {};
// assume not the same
template<typename T, typename U>
struct my_trait : std::false_type
{ };
// both specializations of MyClass
template<typename T1, std::size_t N1, typename T2, std::size_t N2>
struct my_trait<MyClass<T1, N1>, MyClass<T2, N2>>
: std::true_type
{ };
// both specializations of some class template Templ<typename, std::size_t>
template<template<typename, std::size_t> class Templ, typename A1, std::size_t S1, typename A2, std::size_t S2>
struct my_trait<Templ<A1, S1>, Templ<A2, S2>>
: std::true_type
{ };
// both specializations of some class template Templ<typename...>
template<template<typename...> class Templ, typename... A1, typename... A2>
struct my_trait<Templ<A1...>, Templ<A2...>>
: std::true_type
{ };
Nguồn
2013-04-22 14:10:17
@rhalbersma, không phải là một bản sao, câu hỏi khác muốn biết làm thế nào để cho biết nếu hai chuyên môn sử dụng cùng một định nghĩa, tức là cả hai đều sử dụng mẫu chính hoặc cả hai đều sử dụng cùng một chuyên môn từng phần hoặc cả hai đều sử dụng cùng một chuyên môn rõ ràng. Đó không phải là câu hỏi ở đây, theo như tôi có thể nói. –
@Vincent, đặc điểm cần làm việc để phát hiện sử dụng mẫu _any_ class hay chỉ cho 'MyClass'? Tôi không nghĩ rằng nó có thể nói chung cho các mẫu lớp bằng cách sử dụng kết hợp các loại và các tham số không phải kiểu. –
@JonathanWakely xóa nhận xét, dường như không thể rút bỏ phiếu bầu. – TemplateRex