Có thể truy cập các giá trị của các tham số mẫu không kiểu trong lớp mẫu chuyên biệt không?Có thể truy cập các giá trị của các tham số mẫu không kiểu trong lớp mẫu chuyên biệt không?
Nếu tôi có lớp mẫu với chuyên môn:
template <int major, int minor> struct A {
void f() { cout << major << endl; }
}
template <> struct A<4,0> {
void f() { cout << ??? << endl; }
}
Tôi biết nó là trường hợp ở trên nó là đơn giản để hardcode giá trị 4 và 0 thay vì sử dụng các biến nhưng những gì tôi có một lớp học lớn mà tôi đang chuyên và tôi muốn có thể truy cập các giá trị.
Có thể trong A < 4,0> để truy cập major
và minor
giá trị (4 và 0) không? Hoặc tôi phải gán chúng vào mẫu instantiation như hằng số:
template <> struct A<4,0> {
static const int major = 4;
static const int minor = 0;
...
}
Nếu bạn chuyên dựa trên giá trị thì điều đó ngụ ý rằng có điều gì đó đặc biệt về những giá trị cụ thể đó. Nếu bạn sử dụng chúng như các giá trị chung trong toàn bộ khuôn mẫu và chỉ coi chúng là đặc biệt ở một vài nơi, bạn có thể trừu tượng hóa hành vi đặc biệt thành một mẫu lớp chuyên biệt nhỏ hơn để lại mẫu lớn hoàn toàn chung chung và không chuyên biệt. Đó là một chút khó khăn để nói như vậy bạn có thể mở rộng câu hỏi của bạn để được nhiều hơn 'thực'? –
Tôi nghĩ câu hỏi là đủ thực tế. Tôi có lớp cơ sở hiện có thực hiện hành vi cụ thể dựa trên phiên bản giao thức. Trước đây nó có một thành viên trả về phiên bản giao thức - vì thành viên đó không còn tồn tại nữa, đó là phương thức ghi nhật ký đã bao gồm phiên bản giao thức trong đầu ra. Tôi chỉ có thể hardcode các giá trị nhưng tôi muốn biết nếu có cách tốt hơn. Câu trả lời được chấp nhận cung cấp cách làm tốt - tôi thực sự sử dụng các đặc điểm theo cách tương tự ở những nơi khác - để nhận các kiểu tham số nhưng ý định là như nhau. – stefanB