2014-10-07 77 views
-1

我想根據定義加載各種頭文件(模塊,插件)。繼承人我的方法:如何實現動態模塊(在頭文件中)加載c + +

template<typename T = float> 
class container { 
    T *_data; 

#ifdef mymodule1 
#include mymodule1 
#endif 

...} 

Mymodule1.h:

container<T> fooOnContainer() [maybe const] { 
    makesomething involving the T template parameter 
} 

和含有 「主」 的文件中:

#define mymodule1 "mymodule1.h" 
#include "container.h" 
in main { using it } 

所以基本上只定義頭文件將被納入我的容器。我在庫中看到了這種叫做「cimg」的方法,但是我不能讓它工作,因爲編譯器不能推導出模板參數。它的罰款,如果我做一樣的東西:

container<T>& fooOnContainer(T param) { 
... 
} 

但是,有沒有辦法做到這一點像第一個「mymodule1.h」?也許操作符重載?或者如果有人不可能做到,有人會建議我採用更好更簡單的方法嗎? (我真不明白它是如何工作該庫:))

編輯:

很抱歉,如果我是不確定的,所以這裏是一些代碼:

這是一個毫無意義的例子,但我想讓這樣的事情,但當然更復雜:

Mymodule1.h:

int getWidth() const { 
    return (*this)._width; 
} 

和智能說: 「在YPE限定符不允許在非成員函數「

又如:

T getPos(int x) const { 
    T* px; 
    return _data[x]; 
} 

和智能說: ‘T’是未定義的,標識符‘_data’未定義

+0

實際上你是如何使用它的(http://stackoverflow.com/posts/26241935/edit)? – 2014-10-07 17:46:09

+0

您可以創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)並向我們展示?還請包括您擁有的任何和所有錯誤。 – 2014-10-07 17:58:20

+0

例如: container <> img; ... load image ... container <> dest; dest = image.fooOnContainer([閾值或其他]) – ex4cutor 2014-10-07 18:00:56

回答

0

哦,所以你只能從intellisense中得到錯誤?不是來自實際的編譯器?這是因爲編輯器編輯Mymodule1.h文件時編輯器不具備所有數據,編輯器不知道代碼實際上是大類的一部分。

解決方案?沒有,如果你想繼續使用這樣的頭文件。唯一的解決方案是不使用頭文件,而是在實際代碼周圍使用預處理器條件。

+0

好吧,似乎它只是intellisense,我是一個白癡:)(我編譯錯誤之前,但之後,我相信intellisense,並沒有編譯它...) 我想我會嘗試使用預處理器條件來擺脫我的.h文件中的thoose錯誤或類似的東西,謝謝! – ex4cutor 2014-10-07 20:06:10

0

它類似於包括後衛,應該使用 #ifndef代替 #ifdef

... 
#ifndef mymodule1 
#include mymodule1 
#endif 
... 

這裏的事情是編譯器用a.h文件的內容替換#include「a.h」。沒有metter它包含。如果當前上下文中的語法是正確的,那麼它應該都是好的。

我試過你的代碼,一切正常。所以請提供有關錯誤的詳細信息。

+0

我認爲OP實際上只想包含文件,如果宏*是*定義,而不是其他方式。 – 2014-10-07 17:55:20

+0

是的,我的壞。我已經更新 – teivaz 2014-10-07 18:10:50