Tôi có hai phiên bản của cùng một hàm thành viên tĩnh: một tham số con trỏ tới tham số và lấy tham số con trỏ tới tham số. Tôi muốn tránh trùng lặp mã.
Sau khi đọc một số câu hỏi stack overflow (những là tất cả về không tĩnh chức năng thành viên mặc dù) tôi đã đưa ra với điều này:các phiên bản const và non-const của các hàm thành viên * tĩnh *
class C {
private:
static const type* func(const type* x) {
//long code
}
static type* func(type* x) {
return const_cast<type*>(func(static_cast<const type*>(x)));
}
public:
//some code that uses these functions
};
(Tôi biết tung hứng với con trỏ nói chung là một ý tưởng tồi, nhưng tôi m thực hiện một cấu trúc dữ liệu)
tôi tìm thấy một số mã trong libstdC++ trông như thế này:.
Chú ý: đây không phải là chức năng thành viên
static type* local_func(type* x)
{
//long code
}
type* func(type* x)
{
return local_func(x);
}
const type* func(const type* x)
{
return local_func(const_cast<type*>(x));
}
Trong phương pháp tiếp cận đầu tiên, mã nằm trong một hàm nhận tham số con trỏ tới tham số.
Trong cách tiếp cận thứ hai, mã nằm trong một hàm nhận tham số con trỏ tới không tham số.
Phương pháp nào thường nên được sử dụng? Cả hai đều đúng không?
nhận thuật ngữ đúng. Các thành viên lớp tĩnh ** không thể ** là const. – SergeyA
Bạn cũng có thể sử dụng các mẫu để tránh trùng lặp mã, mặc dù có thể quá mức nếu 'loại' được mã hóa cứng. – Manik
@SergeyA Tôi đã viết "(bằng cách này tôi có nghĩa là họ lấy và trả lại con trỏ đến các đối tượng const/non-const)" – Xack