Sử dụng C ++ 11 để phát triển Game Engine đa nền tảng


18

Lưu ý: Đây không phải là câu hỏi 'đưa ra ý kiến ​​của bạn' về C ++ 03 và C ++ 11.

Công cụ trò chơi của chúng tôi, được viết bằng C ++ 03, được thiết kế để được biên dịch trên Windows, OSX và iOS. Hỗ trợ Linux được lên kế hoạch cho (rất) trong tương lai gần. Kinh nghiệm của chúng tôi bị hạn chế khi nói đến bảng điều khiển, đó là lý do tại sao tôi hỏi câu hỏi này.

Hiện tại, chúng tôi đang tranh luận về việc chuyển sang C ++ 11 và sử dụng các tính năng không tương thích của tiêu chuẩn C ++ 11 có thể gây ra vấn đề trong tương lai gần hay không khi chúng tôi cần chuyển động cơ của mình sang bất kỳ máy chơi game hiện tại nào (có lẽ trình biên dịch được hỗ trợ bởi một số bảng điều khiển chưa hỗ trợ C ++ 11? Chúng tôi không biết ...).

Vì vậy, các nhà phát triển trò chơi có kinh nghiệm trên nhiều nền tảng và bảng điều khiển, bạn có nghĩ rằng chúng ta nên gắn bó với C ++ 03 cho đến khi thế hệ máy chơi game mới xuất hiện và hầu hết mọi người đã chuyển sang tiêu chuẩn C ++ 11 (họ đã có chưa?). Hoặc hầu hết các bảng điều khiển sử dụng / trình biên dịch hỗ trợ (VC ++, GCC hoặc các biến thể?) Đã hỗ trợ các tính năng của C ++ 11?


1
Kiến thức của tôi có phần lỗi thời vì vậy tôi sẽ không đăng bài này như một câu trả lời, nhưng kinh nghiệm trước đây của tôi về trình biên dịch bảng điều khiển là bạn may mắn nếu chúng phù hợp với tiêu chuẩn cũ, không bao giờ bận tâm đến một cái mới.
Kylotan

1
Những tính năng nào và tại sao chúng quan trọng đến mức bạn cân nhắc sử dụng một tiêu chuẩn không được triển khai đầy đủ ngay cả trên các nền tảng phát triển phổ biến nhất?
rắn5

4
@ Snake5: auto, lambda's, bí danh mẫu, phái đoàn c-tor. Các tính năng này sẽ không chỉ làm cho mã của chúng tôi dễ đọc / dễ bảo trì hơn mà còn tăng năng suất. Chỉ từ khóa tự động là một trong những điều tôi nhớ rất nhiều khi tôi chuyển từ C ++ 11 sang C ++ 03. Các tính năng khác, chẳng hạn như các mẫu matrixdic, mặc dù rất mạnh mẽ và chắc chắn có thể cải thiện mã, chúng ta có thể làm mà không cần (và không được trình biên dịch VC ++ triển khai cho đến nay).
Samaursa

Thêm vào những gì Kylotan nhận xét, tôi hoàn toàn đồng ý với ý kiến ​​của anh ấy, và thậm chí thêm một ví dụ cụ thể vào kinh nghiệm của tôi. Nếu bạn sẽ mở rộng công cụ đó sang nền tảng Android, điều này có thể được thực hiện bằng C ++, bạn sẽ có một khoảng thời gian tồi tệ vì các tính năng C ++ chưa hoàn chỉnh trong NDK. Bạn sẽ không thể sử dụng tiêu chuẩn mới và thậm chí một số điều trước đây sẽ bị lỗi.
Grimshaw

1
@DevilWithin, tôi đã sử dụng khá nhiều tính năng C ++ 11 trong NDK của Android mà không gặp vấn đề gì.
thịt

Câu trả lời:


19

Nếu bạn dựa vào mã của mình để trả tiền cho thực phẩm và nơi trú ẩn và bạn cần hỗ trợ đa nền tảng trên các nền tảng không xác định trong tương lai (hoặc có thể cần hỗ trợ đa nền tảng trong tương lai), sau đó thiết kế mã của bạn để dựa vào Sự tuân thủ chính xác của các nhà văn biên dịch không tuân thủ các tiêu chuẩn ngôn ngữ cạnh chảy máu là nguy hiểm (và tôi sẽ tranh luận, vô trách nhiệm). Nó nguy hiểm cho bạn, và do đó cũng nguy hiểm cho những người phụ thuộc của bạn.

Nếu bạn sẵn sàng chấp nhận rủi ro đó vì lợi ích của mình auto, thì bằng mọi cách, hãy thực hiện nó. Nhưng tôi sẽ không khuyên bạn làm điều đó.

Bởi vì theo kinh nghiệm của tôi, việc đi đa nền tảng, đặc biệt là trên bảng điều khiển , được hoàn thành tốt nhất bằng cách nhắm đến mẫu số chung thấp nhất mà bạn có thể chắc chắn sẽ hoạt động hầu như ở mọi nơi, không phải dựa vào tất cả các tính năng ngôn ngữ mới nhất. Nếu một ngày nào đó bạn cần chuyển sang một nền tảng không hỗ trợ chúng, bạn sẽ phải viết lại hệ thống của mình từ đầu. Bạn có đủ khả năng trả lương / tiền thuê trong khi điều đó xảy ra không?


4
+1 cho điều này (và phần còn lại của bài đăng, nhưng điều này): "dựa vào một loạt các nhà văn trình biên dịch không xác định tuân thủ chính xác các tiêu chuẩn ngôn ngữ cạnh chảy máu là nguy hiểm". Thử nghiệm với những đồ chơi mới nhất luôn thú vị, dựa vào chúng không quá nhiều.
NoobsAreP People2

2
Tôi luôn thực sự lo lắng về việc đưa ra những câu trả lời "thận trọng" này, đặc biệt khi chúng rõ ràng không phải là những gì người đăng ban đầu muốn nghe. Nhưng tôi đã thấy các trình biên dịch lỗi lớn trên bảng điều khiển quá nhiều lần trong sự nghiệp để tôi cảm thấy thoải mái khi nhảy lên các tiêu chuẩn ngôn ngữ mới trong một dự án đa nền tảng. Cần viết lại mã của bạn để giải quyết các vấn đề trong trình biên dịch không bao giờ là điều thú vị, đặc biệt là khi bạn đang trong thời hạn.
Trevor Powell

Tôi sẽ không đánh giá thấp điều này nhưng tiêu chuẩn C ++ mới không chỉ là cú pháp cú pháp như từ khóa tự động.
vdara

1
@TrevorPowell, bạn nói rằng rủi ro mà anh ta sẽ gặp là vì từ khóa tự động, khi có nhiều tính năng cơ bản và quan trọng hơn trong tiêu chuẩn C ++ mới. Một số trong số họ, như tài liệu tham khảo giá trị, sẽ phải được xem xét quan trọng khi nghĩ về rủi ro.
vdara

2
@TrevorPowell đó là lý do tại sao tôi nói rằng bài đăng đó không đáng để đánh giá thấp mặc dù tôi có bất kỳ tranh luận nào về nó. Tôi tin rằng đây là một bài viết hay, tôi chỉ muốn làm rõ rằng tiêu chuẩn C ++ mới có một số tính năng rất quan trọng và xem xét việc sử dụng nó sẽ không chỉ là một vấn đề nhỏ như tự động.
vdara

6

Nếu bạn sẵn sàng làm thêm một chút, bạn có thể xem xét các giải pháp khúc xạ. clang có một số điều thú vị xảy ra trong khu vực đó hiện nay. Có thể sử dụng từ khóa tự động, chạy nó thông qua trình tái cấu trúc sẽ tìm thấy tất cả các cách sử dụng nó, giải quyết chúng cho bạn và xuất mã sau đó biên dịch nó với bất cứ điều gì bạn muốn.

Nhưng điều đó có nghĩa là ít thời gian hơn để làm việc trên trò chơi của bạn.

Ngoài ra còn có tiềm năng cho một số tính năng bổ sung, ví dụ như sự phản chiếu. Bạn có thể tạo một lớp và tự động tạo một danh sách tất cả các thuộc tính cần kiểm tra khi chạy. Có thể rất hữu ích cho việc viết kịch bản, sản xuất các trình soạn thảo trò chơi, v.v. EDIT: Kiểm tra clreflect .

http://cppnow.org/session/refactoring-c-with-clang/

http://www.youtube.com/watch?v=mVbDzTM21BQ

http://clang.llvm.org/docs/Tooling.html

http://clang.llvm.org/docs/RAVFrontendAction.html


Rất thú vị; Bạn đã thử nó cho mục đích này (hoặc tương tự) chưa?
Jonas Byström

Chưa, quyết định đợi cho đến khi nó được phát triển tốt hơn một chút nhưng lần trước tôi thực sự xem xét nó, nó chỉ có trong svn.
David C. Giám mục

Rất thú vị (+1)
Samaursa

Điều này làm tôi nhớ đến một cái gì đó giống như của trăn 2to3nhưng ngược lại và tuyệt vời hơn nhiều nhưng có lẽ khó sử dụng hơn. Man, tốt hơn bao nhiêu có thể autonhận được?
Steven Lu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.