在代码中间使用#include是不是很糟糕?

thc*_*thc 4 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
        }
};
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*phe 6

不,它本质上不是坏事. #include意在允许包含在任何地方.只是这样使用它并不常见,这违背了最不惊讶的原则.

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

这就是为什么C++核心指南建议不要这样做,理解它们有正常的可重用标头:

SF.4:在文件中的其他声明之前包含.h文件

原因

最小化上下文依赖性并提高可读性.

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

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

然后你可以在正文中使用条件编译,或者更好地选择一些基于策略的设计,使用模板来配置在编译时使用的类.