2009-09-07 28 views
8

Có thể quá tải các toán tử lớp C++ trong ngữ cảnh tĩnh không? ví dụ.Quá trình vận hành tĩnh C++

class Class_1{ ... } 
int main() 
{ 

    Class_1[val]... 

} 
+0

nên 'Class_1 [val] 'năng suất một kiểu? Cũng giống như bạn mong đợi để làm 'Class_1 [val] v;'? –

+1

Tôi đã có nó mang lại giá trị tích phân nhưng các loại là tốt. – jameszhao00

+0

Trong C++, các kiểu không thể được biểu diễn trong hệ thống kiểu (chỉ có 'std :: type_id') và tôi không thể nghĩ ra bất kỳ toán tử nào có thể bị quá tải tĩnh. Tôi đề nghị, thay vì hỏi xem liệu ý tưởng triển khai của bạn có khả thi trong C++ hay không, bạn trình bày _problem_ thực tế này có nghĩa là để giải quyết. Ai đó có thể đề xuất triển khai khả thi. – sbi

Trả lời

13

Nếu bạn đang tìm kiếm lập trình meta bằng cách sử dụng toán tử tích hợp: Điều này là không thể - các toán tử tích hợp hoạt động trên các giá trị thời gian chạy chứ không phải trên các giá trị thời gian biên dịch.

Bạn có thể sử dụng boost::mpl cho rằng, và thay vì sử dụng các toán tử tích hợp, sử dụng các mẫu của nó, giống như at cho op[], plus<a, b> cho op+, vv

int main() { 
    using boost::mpl::vector; 
    using boost::mpl::at_c; 
    using boost::mpl::plus; 
    using boost::mpl::int_; 

    typedef vector<int, bool, char, float> Class_1; 
    typedef vector< int_<1>, int_<2> > Numeric_1; 

    at_c<Class_1, 0>::type six = 6; 
    typedef plus<at_c<Numeric_1, 0>::type 
       ,at_c<Numeric_1, 1>::type>::type r; 
    int i3[r::value] = { 4, 5, 6 }; 
    return ((i3[0] + i3[1] + i3[2]) * six) == 90; 
} 
3

Nếu bạn có nghĩa là các nhà điều hành hoạt động trên một lớp, số đó không có ý nghĩa, nó cũng giống như nói operator + có thể khai thác trên int hay double. Các toán tử là cú pháp đường cho các hàm và chúng hoạt động trên các giá trị varibles (các giá trị) không phải kiểu.

+1

Có ý nghĩa nếu bạn có một loại lớp tiện ích - chỉ với các thành viên tĩnh - tải thứ gì đó vào "chính nó", mà bạn muốn truy cập theo cách đơn giản nhất - sử dụng toán tử như '[]'. –

+1

Đúng, thêm vào nhận xét của @ jave.web: chắc chắn có thể có ý nghĩa trong các trường hợp * khi có dữ liệu trong phạm vi tĩnh * của lớp. Vì vậy, không phải với phạm vi tĩnh một cách rõ ràng. Vì vậy, không phải với arithmetics đơn giản, như trong ví dụ của bạn, nhưng các công cụ như [],(), <<, >> vv có thể là đường cú pháp hoàn hảo cho bất kỳ loại lớp quản lý phức tạp nào , mà không ép buộc một cá thể đơn lẻ. –

5

Tôi không tin điều đó là có thể, mặc dù tôi có thể sai về mặt này. Tôi muốn hỏi tại sao bạn lại muốn làm điều này. Thay vì thực hiện các hoạt động trên một lớp thay vì các cá thể, có lẽ bạn chỉ cần một cá thể trong suốt ứng dụng của bạn? Trong trường hợp này, có thể bạn đang sử dụng the singleton pattern.

+1

Tôi từng sử dụng mẫu đơn như điên, nhưng sau đó dừng lại vì mã singleton là một rắc rối để viết thử nghiệm. – jameszhao00

1

Không, toán tử không thể là thành viên tĩnh của một lớp. Sử dụng hàm tĩnh thường xuyên để thay thế.

Các vấn đề liên quan