簡體   English   中英

避免多重包含 c++

[英]Avoiding multiple includes c++

我的 header 文件結構如下

                  base.h
                 /      \
                /        \
       utilities.h       parameters.h
               \           /
                \         /
                 kernels.h
                    

其中utilities.h僅包含函數和parameters.h 。h 包含 class 和 function 模板以及它們的類型指定定義,即

// In parameters.h

// Function templates
template<typename T>
T transform_fxn(const T& value, std::string& method) { T a; return a; }
template<>
int transform_fxn(const int& value, std::string& method){
    .....   
}
template<>
double transform_fxn(const double& value, std::string& method){
    .....
}


// Class templates
template<typename T>
class BaseParameter {
    .....
}

template <typename T>
class Parameter;

template<>
class Parameter<double> : public BaseParameter<double> {
    .....
}
template<>
class Parameter<int> : public BaseParameter<int> {
    .....
}

kernels.h文件需要參數中的模板和utilities.h中的函數,但是兩者都依賴於base.h 如何避免在utilities.hparameters.h中導入base.h 相反,什么是有效的導入方式?

跨平台你確實包括這樣的守衛。

參數.h

#ifndef PARAMETERS_H
#define PARAMETERS_H

... your header stuff here ...

#endif

MSVC(和大多數其他編譯器)也允許

#pragma once

在 header 的頂部。它還將確保 header 僅包含一次。

似乎無法避免多次包含標頭,因為您通常需要包含源代碼所需的標頭。 但是你可以使用包括守衛。 它有兩種:

#ifndef BASE_H
  #define BASE_H

... <your code>

#endif

或另一種方法如下:

#pragma once

兩者都有助於避免問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM