Tôi đang sử dụng 'thủ thuật' sau khi biên dịch (dựa trên ADL) để tạo một hàm chỉ hợp lệ/được định nghĩa/có thể gọi bởi các lớp trong cùng một không gian tên.Chuyên dùng mẫu phương thức cho các lớp trong không gian tên
namespace Family1
{
struct ModelA{};
struct ModelB{};
template<typename T>
bool is_in_Family1(T const& t)
{
return true;
}
};
namespace Family2
{
struct ModelC{};
template<typename T>
bool is_in_Family2(T const& t)
{
return true;
}
};
Family1::ModelA mA;
Family2::ModelC mC;
is_in_Family1(mA); // VALID
is_in_Family1(mC); // ERROR
Bây giờ, tôi muốn sử dụng nguyên tắc này (hoặc một cái gì đó tương tự) để sản xuất một chuyên môn của Foo::Bar
(dưới đây) cho các lớp học thuộc cho mỗi không gian tên ví dụ Family1
.
// I would like to specialize the method template Bar for classes in Family1
// namespace; and another specialization for classes in Family2 namespace
struct Foo
{
template<typename T>
void Bar(T& _T){}
};
Để dễ bảo trì và số lượng lớn các lớp trong mỗi không gian tên, nếu có thể, tôi muốn thực hiện kiểm tra này mà không đặt tên tất cả các lớp trong không gian tên.
Tại sao 'Foo' một lớp mẫu của người xây dựng cũng là một mẫu với một kiểu khác? 'Foo myvar ('4');'? Ý của bạn chỉ có một mẫu 'template '? Bởi vì cái bên ngoài không được sử dụng. Tôi nghĩ rằng điều này có thể được thực hiện nếu 'Foo' chỉ là một chức năng, nhưng tôi không nghĩ nó có thể là một cấu trúc. Hoặc ít nhất, không độc đáo. –