我一直在读到这样做很糟糕,但我觉得这些答案并没有完全回答我的具体问题。
在某些情况下它似乎真的很有用。我想做如下的事情:
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/