c++ - 在代码中间使用#include 不好吗?

标签 c++

我一直在读到这样做很糟糕,但我觉得这些答案并没有完全回答我的具体问题。

在某些情况下它似乎真的很有用。我想做如下的事情:

class Example {
    private:
        int val;
    public:
        void my_function() {
#if defined (__AVX2__)
    #include <function_internal_code_using_avx2.h>
#else
    #include <function_internal_code_without_avx2.h>
#endif
        }
};

如果在此示例中在代码中间使用 #include 不好,那么实现我想要做的事情的最佳实践方法是什么?也就是说,我试图在 avx2 可编译和不可编译的情况下区分成员函数实现。

最佳答案

不,它本质上并不坏。 #include 是为了允许包含在任何地方。只是这样使用它并不常见,这违背了 principle of least astonishment .

围绕包含开发的良好实践都是基于编译单元开始时包含的假设,原则上在任何命名空间之外。

这当然是为什么 C++ core guidelines建议不要这样做,要知道他们有正常的可重用 header :

SF.4: Include .h files before other declarations in a file

Reason

Minimize context dependencies and increase readability.

补充说明:如何解决您的潜在问题

不确定完整的上下文。但首先,我不会将函数体放在类定义中。这将更好地封装类消费者的实现特定细节,这些细节不需要知道。

然后你可以在主体中使用条件编译,或者更好地选择一些 policy based design ,使用模板配置要在编译时使用的类。

关于c++ - 在代码中间使用#include 不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54822207/

相关文章:

java对等同于c++

c++ - Gnu Make 的递归性和 friend

c++ - 组合可选宏以形成列表

C++ 二叉搜索树打印和深度计算

c++ - 从线程更新进度条的最佳方法

c++ - 如何使用在另一个类的构造函数中将参数放在堆栈上的构造函数创建对象

c++ - masm 指令集资源

c++ - 在 gdb 中打印整个链表?

c++ - 代码依赖文档软件

c++ - 对大数进行加法运算