Sử dụng macro tiền xử lý. Dưới đây là một ví dụ từ the not-yet-official Boost.XInt library (hiện xếp hàng để xem xét để đưa vào Boost):
#ifdef BOOST_XINT_DOXYGEN_IGNORE
// The documentation should see a simplified version of the template
// parameters.
#define BOOST_XINT_INITIAL_APARAMS ...
#define BOOST_XINT_CLASS_APARAMS ...
#define BOOST_XINT_CLASS_BPARAMS other
#define BOOST_XINT_APARAMS ...
#define BOOST_XINT_BPARAMS other
#else
#define BOOST_XINT_INITIAL_APARAMS \
class A0 = parameter::void_, \
class A1 = parameter::void_, \
class A2 = parameter::void_, \
class A3 = parameter::void_, \
class A4 = parameter::void_, \
class A5 = parameter::void_
#define BOOST_XINT_CLASS_APARAMS class A0, class A1, class A2, class A3, \
class A4, class A5
#define BOOST_XINT_APARAMS A0, A1, A2, A3, A4, A5
#define BOOST_XINT_CLASS_BPARAMS class B0, class B1, class B2, class B3, \
class B4, class B5
#define BOOST_XINT_BPARAMS B0, B1, B2, B3, B4, B5
#endif
Sử dụng #define
tên macro d thay vì các thông số mẫu, ở khắp mọi nơi bạn cần đến chúng, như vậy:
/*! \brief The integer_t class template.
This class implements the standard aribitrary-length %integer type.
[...lots more documentation omitted...]
*/
template<BOOST_XINT_INITIAL_APARAMS>
class integer_t: virtual public detail::integer_t_data<BOOST_XINT_APARAMS>,
public detail::nan_functions<detail::integer_t_data<BOOST_XINT_APARAMS>::
NothrowType::value, // ...lots more base classes omitted...
{
// ...etcetera
Và đặt những dòng như thế này trong Doxyfile:
PREDEFINED = BOOST_XINT_DOXYGEN_IGNORE
EXPAND_AS_DEFINED = BOOST_XINT_INITIAL_APARAMS \
BOOST_XINT_CLASS_APARAMS \
BOOST_XINT_CLASS_BPARAMS \
BOOST_XINT_APARAMS \
BOOST_XINT_BPARAMS
Kết quả là Doxygen thấy "..." hoặc "khác" cho thông số mẫu và trình biên dịch nhìn thấy những cái thực. Nếu bạn mô tả các tham số mẫu trong tài liệu cho chính lớp đó thì người dùng thư viện sẽ chỉ cần thấy chúng ở một nơi mà anh ấy có khả năng tìm kiếm chúng; chúng sẽ bị ẩn ở mọi nơi khác. Là một lợi thế bổ sung cho thiết kế này, nếu bạn cần thay đổi các danh sách tham số mẫu, bạn chỉ cần thay đổi chúng trong các định nghĩa macro và các hàm thực sự sử dụng các tham số đã thay đổi. Mọi thứ khác sẽ tự động điều chỉnh.
Tôi nghĩ bạn cần viết tài liệu thích hợp, sử dụng trình xử lý văn bản. Nếu tôi bắt gặp các tài liệu doxy tạo thông thường (cho dù bạn có thêm chú thích thêm bao nhiêu) cho những thứ như thế này, tôi nghĩ tôi có lẽ sẽ nói "không cảm ơn". Nhưng sau đó tôi có lẽ sẽ nói nó anyway :-) –
Đây chính xác là lý do tại sao tôi tránh xa template metaprogramming trong C++. Thật lố bịch. – You
@Bạn không có cách nào tốt hơn để làm điều đó, không phải bằng bất kỳ ngôn ngữ nào – Anycorn