Tôi có chức năng ghi nhật ký được gọi tại một vài nơi trong suốt mã. Với mỗi nhật ký, tôi phải cung cấp 2 hằng số thời gian biên dịch. Có 2 phương pháp để thực hiện:Cách tiếp cận nào tốt hơn để cung cấp hằng số thời gian biên dịch cho một hàm? Đối số chức năng so với tham số mẫu
(1) Chức năng lập luận:
template<typename T>
void log (const T &obj, const int LINE, const int COUNT)
{
// T is used for some purpose
if(debug)
logging(obj.out(), LINE, COUNT);
}
gọi nó như là,
log(str, __LINE__, __COUNTER__);
(2) tham số Template:
template<typename T, int LINE, int COUNT>
void log (T &obj)
{
// T is used for some purpose
if(debug)
logging(obj.out(), LINE, COUNT);
}
gọi là,
log<__LINE__, __COUNTER__>(str);
Tôi không thể quyết định, bởi vì cách tiếp cận đầu tiên mang đến sự đơn giản, nhưng chúng tôi đang chuyển đổi liên tục tại thời gian biên dịch. Cách tiếp cận thứ 2 là hoàn hảo, nhưng thời gian biên dịch có lẽ sẽ tăng lên. Nhiệm vụ này tẻ nhạt, và tôi chưa thực hiện bất kỳ công việc nào trong số đó, vì vậy tôi không có bất kỳ nhãn hiệu băng ghế dự bị nào.
Sẽ là một trợ giúp tuyệt vời nếu ai đó có thể trả lời câu hỏi này từ trải nghiệm/kiến thức của họ.
Làm thế nào để bạn xác định "tốt hơn"? Cả hai đều làm việc *, vậy bạn sẽ sử dụng tiêu chuẩn nào để nói rằng cái nào tốt hơn cái kia? –
@NicolBolas, vì tôi muốn chọn tốt hơn trong số 2 dựa trên thời gian biên soạn và thời gian chạy. Ngoài ra còn có một sửa đổi nhỏ trong mã ví dụ. – iammilind
Bất kể hàm 'logging' nào, nó sẽ * chắc chắn nhất * chậm hơn so với truyền hai số nguyên làm đối số. Vì vậy, tôi không thấy hiệu suất thời gian chạy sẽ thay đổi rất nhiều theo cách nào. Điều này nghe có vẻ nghi ngờ như một tối ưu hóa sớm. –