2017-04-02 16 views
1

我正在研究在我的寵物項目中使用C++模塊TS的機會。對我來說,一個重要的用例是包裝傳統的標題。如何從不使用`export`關鍵字的模塊導出函數和類?

假設我有一些函數和類頭文件,std.io.ixx

cl /c /experimental:module /module:name std.io /module:export std.io.ixx 

int f(int x) 
{ 
    return 2 + x; 
} 

根據this article,我使用下面的命令編譯模塊

這給我一個新的文件std.io.ifc。然後,我用這個模塊中的另一個源文件,main.cxx

import std.io; 

int main() 
{ 
    f(5); 
} 

這是使用下面的命令編譯:

cl /c /experimental:module main.cxx 

編譯給了我以下錯誤:

main.cxx(5): error C3861: 'f': identifier not found 

所以,我們可以看到,模塊中的標識符沒有被導出。我可以通過在每個要導出的標識符之前手動添加export關鍵字來解決此問題,但對於包裝傳統標頭的用例而言,這是不可能的。

我在做什麼錯了?如何從頭中導出所有可能的標識符?

回答

1

我認爲有兩個錯誤:

  1. 模塊名稱不能以std.啓動。當我試圖做到這一點,我得到了錯誤

    error C3674: could not find standard library module 'std.io' 
    

    如果您尚未安裝Visual Studio的標準庫模塊組件可能不會出現此錯誤。不過,我不確定這一點。

  2. 在您鏈接到博客中,有這樣一個字條:

    Note that you currently have to include your header in a .cpp file (or rename your header) because of a limitation in our compiler’s file handling.

    這確實似乎是因爲當我與擴展ixx嘗試,我得到了同樣的錯誤,你的情況。

但解決上述兩個問題後,它工作正常。

相關問題