Необязательный заголовок только библиотека

Я хотел бы написать библиотеку C ++, которая не-заголовок только по умолчанию, но может использоваться как библиотека только заголовка, определяющая 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

#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() { ... }

Каковы плюсы и минусы этих подходов? Есть ли лучшие варианты?

6

Решение

В каждом подходе нет реальной разницы, потому что как встроенные методы, так и шаблоны могут в конечном итоге вставляться в ваш код в зависимости от оптимизации компилятора. Увидеть этот пост, обсуждающий встроенные против шаблонов.

2

Другие решения


По вопросам рекламы [email protected]