Tôi muốn viết thư viện C++ là không chỉ tiêu đề theo mặc định nhưng có thể được sử dụng làm thư viện chỉ tiêu đề xác định macro NOLIB
.Thư viện chỉ tiêu đề tùy chọn
Tôi đã nhìn thấy hai phương pháp:
- định nghĩa inline
foo.h
#if !defined(FOO_H)
#define FOO_H
#if defined(NOLIB)
# define MYINLINE inline
#else
# define MYINLINE
#endif
class foo
{
// ...
};
#if defined(NOLIB)
# include "foo.cc"
#endif
#endif // include guard
foo.cc
#if !defined(NOLIB)
# include "foo.h"
#endif
MYINLINE void foo::something() { ... }
- "nhân tạo" mẫu
foo.h
#if !defined(FOO_H)
#define FOO_H
#if defined(NOLIB)
# define MYTEMPLATE template<bool DUMMY>
# define MYFOO foo_impl
# define MYFOO_T foo_impl<DUMMY>
#else
# define MYTEMPLATE
# define MYFOO foo
# define MYFOO_T foo
#endif
MYTEMPLATE
class MYFOO
{
// ...
};
#if defined(NOLIB)
using foo = foo_impl<true>;
# include "foo.cc"
#endif
#endif // include guard
foo.cc
#if !defined(NOLIB)
# include "foo.h"
#endif
MYTEMPLATE
void MYFOO_T::something() { ... }
Ưu và nhược điểm của các phương pháp này là gì? Có lựa chọn nào tốt hơn không?
Nếu các chức năng đủ nhỏ để được gạch chân, bạn có khả năng gửi các bản triển khai trong một thư viện tĩnh hoặc thậm chí gửi các tệp .cc. –