2012-07-22 61 views
4

我正在研究模板類的代碼庫。它只是頭文件(沒有.cpp文件)。我想隱藏實現並提供一個共享庫和一些只包含聲明的頭文件。不幸的是聽起來沒有任何意義。由於沒有編譯代碼,那麼在這樣的共享庫中會有什麼?嘗試在編譯後從頭文件中刪除定義,會導致未定義的引用。有沒有辦法強制編譯器在dll或共享庫中發佈對象,而無需顯式實例化模板類?將C++頭僅模板編譯爲共享庫

+2

不,只是運送標題。 – 2012-07-22 17:22:38

+0

這是不可能的。 – Jichao 2012-07-22 17:24:01

+3

我認爲你可以將你的模板分割成h和cpp文件,並且有一個共享庫來顯式實例化所有可能的情況。現在您可以將其發送給您的客戶,並且可以鏈接到它。他們可能無法爲新類型實例化您的模板,但可以使其工作 – 2012-07-22 17:25:47

回答

5

不,在可預見的未來沒有,也不會成爲這樣做的一種方式。提供模板C++代碼的唯一方法只是作爲頭文件。 Modules可能會改變這種情況,但在圖書館完成之前不太可能發生。

你可以嘗試的東西是分裂成實現並明確實例化所有可能的用例。然後,您發佈的庫不會與任何其他類型的工作,然後實例化,並會顯着減少模板帶來的好處。

+0

我以爲。我很愚蠢,犯了一個錯誤。上帝這似乎很愚蠢!我需要閱讀有關模塊。 – fedvasu 2014-10-03 02:15:03

3

模板實現需要在編譯時知道。這就是爲什麼你不能將實現與聲明分開的原因。所以如果你想擁有模板的優點,那麼傳遞你的頭文件是沒有辦法的。