Tôi thích sắp xếp mã của mình, vì vậy lý tưởng tôi muốn một lớp cho mỗi tệp hoặc khi tôi có các hàm không phải là thành viên, một hàm cho mỗi tệp.Tôi có nên đặt nhiều chức năng vào một tệp không? Hoặc, nhiều hay ít, một hàm cho mỗi tệp?
Lý do là:
Khi tôi đọc mã tôi sẽ luôn luôn biết trong tập tin những gì tôi nên tìm một chức năng nhất định hoặc lớp học.
Nếu nó là một lớp học hoặc phi thành viên chức năng cho mỗi tập tin tiêu đề, sau đó tôi sẽ không bao gồm cả một mớ hỗn độn khi tôi
include
một tập tin header.Nếu tôi thực hiện một thay đổi nhỏ trong một chức năng thì chỉ có chức năng đó sẽ phải được biên dịch lại.
Tuy nhiên, chia mọi thứ thành nhiều tiêu đề và nhiều tệp triển khai có thể làm chậm quá trình biên dịch. Trong dự án của tôi, hầu hết các chức năng truy cập một số lượng nhất định các chức năng thư viện khác theo khuôn mẫu. Vì vậy, mã sẽ được biên dịch hơn và hơn, một lần cho mỗi tập tin thực hiện. Biên soạn toàn bộ dự án của tôi hiện đang mất 45 phút hoặc lâu hơn trên một máy. Có khoảng 50 tệp đối tượng và mỗi tệp sử dụng cùng tiêu đề đắt tiền để biên dịch.
Có lẽ, nó là có thể chấp nhận để có một lớp (hoặc chức năng không thành viên) mỗi tiêu đề tập tin, nhưng việc đưa việc triển khai của nhiều hoặc tất cả các chức năng này vào một tập tin thực hiện, như trong ví dụ sau?
// foo.h
void foo(int n);
// bar.h
void bar(double d);
// foobar.cpp
#include <vector>
void foo(int n) { std::vector<int> v; ... }
void bar(double d) { std::vector<int> w; ... }
Một lần nữa, lợi thế sẽ là tôi có thể chỉ bao gồm chức năng foo hay chỉ là chức năng thanh, và biên soạn toàn bộ dự án sẽ nhanh hơn vì foobar.cpp
là một tập tin, do đó std::vector<int>
(đó là chỉ là một ví dụ ở đây cho một số xây dựng đắt tiền khác để biên dịch templated) đã được biên soạn chỉ trong một lần, trái ngược với hai lần nếu tôi biên soạn một foo.cpp
và bar.cpp
riêng biệt. Tất nhiên, lý do của tôi (3) ở trên là không hợp lệ cho kịch bản này: Sau khi chỉ thay đổi foo() {...} Tôi phải biên dịch lại toàn bộ, tiềm năng lớn, tập tin foobar.cpp
.
Tôi tò mò ý kiến của bạn là gì!
Haha, bạn Úc! Trong tiếng Anh Mỹ, bạn không "thích", nhưng "yêu" mọi thứ. Ngoài ra, mọi thứ thường "tuyệt vời" và "to lớn" thay vì chỉ "tốt" hoặc "tuyệt vời"! Nếu, bằng tiếng Anh Mỹ, bạn chỉ nói rằng bạn "thích" một cái gì đó, nó có nghĩa là bạn thực sự không thích nó! ;-) – Frank
... nhưng cảm ơn vì nhận xét "tuyệt vời"! :-P – Frank