मैं एक सी ++ लाइब्रेरी लिखना चाहता हूं जो डिफ़ॉल्ट रूप से नहीं-हेडर-केवल है लेकिन इसे केवल NOLIB
मैक्रो परिभाषित करने वाले शीर्षलेख के रूप में उपयोग किया जा सकता है।वैकल्पिक शीर्षलेख केवल लाइब्रेरी
- इनलाइन परिभाषाओं
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
0123:मैं दो दृष्टिकोण को देखा है
#if !defined(NOLIB)
# include "foo.h"
#endif
MYINLINE void foo::something() { ... }
- "कृत्रिम" टेम्पलेट
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() { ... }
इन दृष्टिकोणों के पेशेवरों और विपक्ष क्या हैं? क्या बेहतर विकल्प हैं?
यदि फ़ंक्शंस को रेखांकित करने के लिए पर्याप्त छोटे हैं, तो आप संभावित रूप से स्थिर पुस्तकालय में कार्यान्वयन भेज सकते हैं, या यहां तक कि .cc फ़ाइलों को भी भेज सकते हैं। –