2013-04-14 74 views
0

今天我想試試一個名爲oglplus的opengl包裝。我能夠使用這個庫,但是我的IDE向我發送了大量錯誤消息。我用QtCreator和EclipseCDT嘗試了它。是否有可能編寫沒有IDE能夠解析的代碼?

基本上沒有IDE能夠看到各種類的成員/方法。所以我做了一些挖掘。例如類FragmentShader至少有兩個稱爲源和編譯的方法。

Eclipse和QtCreator向我展示了以下源代碼。

#if OGLPLUS_DOCUMENTATION_ONLY 
    /// Fragment shader wrapper 
    /** 
    * @see Shader 
    * @see Program 
    * @ingroup objects 
    */ 
    class FragmentShader 
    : public Shader 
    { }; 
    #elif GL_FRAGMENT_SHADER 
    typedef Specialized< 
     Shader, 
     OGLPLUS_CONST_ENUM_VALUE(ShaderType::Fragment), 
     SpecializedShaderInitializer 
    > FragmentShader; 
    #endif 

所以好吧,可能每個着色器都是完全一樣的,只是命名不同而已。

class Shader 
: public ShaderOps 
{ 
public: 
    Shader(ShaderType type); 
    Shader(ShaderType type, String description); 
}; 

看來ShaderOps是重要的類。

我還發現,在ShaderOps方法「源」(它是在公共塊)

const ShaderOps& Source(
     const GLchar** srcs, 
     const GLint* lens, 
     int count 
    ) const 
    { 
     assert(_name != 0); 
     OGLPLUS_GLFUNC(ShaderSource)(_name, count, srcs, lens); 
     return *this; 
    } 

你有任何想法,爲什麼不IDE能夠看到這些方法呢?源代碼中有些奇怪的東西嗎?

甚至有可能編寫如此不同的代碼,以至於IDE無法解析它? Ps:我只用eclipse cdt和Qtcreator測試過。

+0

的IDE不會解析,編譯器會。 – deepmax

+0

因此,編譯器的工作是告訴IDE一個類有哪些方法/成員? –

+0

是的,實際上它取決於,通常IDE使用編譯器或類似的東西來解析代碼。但是,也許有些罕見的IDE自己做。 – deepmax

回答

4

其原因可能是IFDEF後衛:#if OGLPLUS_DOCUMENTATION_ONLY

如果沒有正確定義的預處理器,IDE不會顯示相關的類/方法

相關問題