gpt4 book ai didi

c++ - 可选的仅 header 库

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:28 24 4
gpt4 key购买 nike

我想编写一个 C++ 库,默认情况下not-header-only 但可以用作定义 NOLIB 宏的仅 header 库。

我见过两种方法:

  • 内联定义

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

这些方法的优缺点是什么?有更好的选择吗?

最佳答案

每种方法都没有真正的区别,因为根据编译器优化,内联方法或模板最终可能会插入到您的代码中。参见 this发布讨论内联与模板。

关于c++ - 可选的仅 header 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com