Nói rằng tôi có một lớp templated:Gọi phiên bản không chuyên biệt của một hàm khi chuyên dùng trong C++?
template <typename T>
class foo {
void do_someting(T obj) {
// do something generic...
}
};
và tôi muốn chuyên do_something, nhưng bên trong nó tôi muốn gọi là "bình thường" chức năng do_something:
template<>
void foo<MyObj>::do_something(MyObj obj) {
// do something specific...
// and ALSO do something generic!
}
là có một cách để tham khảo đến phiên bản bình thường của do_something trong chức năng chuyên môn của tôi? Hay tôi chỉ cần sao chép mã?
(Tôi biết rằng tôi có thể refactor foo theo cách mà tôi sẽ không có vấn đề này chính xác, nhưng khi nó xảy ra tôi không thể thực sự sửa đổi foo "thực", vì nó là mã chia sẻ nhiều.)
Không có phiên bản "bình thường" của 'do_something' cho loại' MyObj' - toàn bộ hiệu ứng của chuyên môn mẫu là * thay thế * instantiation mà bạn sẽ có được từ mẫu cơ sở, với lớp/chức năng bạn xác định trong chuyên môn. –
có thể trùng lặp của [Làm thế nào tôi có thể nhận được một mẫu chuyên biệt để sử dụng phiên bản không chuyên biệt của một chức năng thành viên?] (Http://stackoverflow.com/questions/347096/how-can-i-get-a-specialized-template- –
Phải, nhưng trình biên dịch biết về mã trong foo :: do_something, không có lý do tại sao nó không thể cho phép tôi tham chiếu đến nó bằng cách nào đó. Tôi hoàn toàn sẵn sàng tin rằng tính năng ngôn ngữ này không tồn tại, mặc dù --- đó là những gì tôi đang cố gắng tìm ra. –