我最近和一位朋友通話,他告訴我在C++ Metro應用程序中不允許使用CopyFile和CopyFileEx(這看起來是正確的)。爲什麼是這樣?又爲什麼提出命名爲CopyFile2爲什麼CopyFile2替換CopyFile和CopyFileEx?
全部複製一個文件一個奇怪的替代品,所以爲什麼建立API的禁令部分提出了新的功能,以弄清楚?
我最近和一位朋友通話,他告訴我在C++ Metro應用程序中不允許使用CopyFile和CopyFileEx(這看起來是正確的)。爲什麼是這樣?又爲什麼提出命名爲CopyFile2爲什麼CopyFile2替換CopyFile和CopyFileEx?
全部複製一個文件一個奇怪的替代品,所以爲什麼建立API的禁令部分提出了新的功能,以弄清楚?
與地鐵API一起採取的一般立場是「如果有一個Ex函數或某種東西取代它,你必須調用新的。對於8位字符串(出於歷史原因,錯誤地命名爲「ANSI編碼」)版本的函數也是如此。除此之外,這可以保持Windows RT的代碼大小。
讓我們來分析一下CopyFile2
...對於其中一個,options參數現在是一個具有第一個成員大小的結構。我認爲這比未來的擴展性更好,這是CopyFileEx
。這使Microsoft可以添加新的選項,同時保持與舊呼叫者的二進制兼容性。 (微軟可以延長結構的長度,然後檢查dwSize
以確定你有什麼版本的結構,並相應地調整它的行爲。)這僅僅使得它比將要求函數簽名改變的CopyFileEx
更具前景證明(因此是完全的新功能)添加一個選項。 (我還沒有仔細看,也許他們並已經CopyFile2
增加一個選項,以及...)
還有的「更廣泛的規則,如果有一個防爆功能,他們希望他們能回到過去時間並以這種方式開始「,通常會增加一個」看,我們非常抱歉,在Ex版本中看起來更好,沒關係「。儘管大多數情況下,這只是事後看來的好處。我們都有代碼,我們希望我們可以爆炸,如果我們有機會得到更乾淨的(大部分時間)。 –
@JonHanna - 實際上,我個人認爲一些'Ex'函數是不必要的,它在實踐中變成了簡單而優雅的界面。 (注意相比之下,在Unix世界中改變系統調用的簽名是多麼的罕見 - 你可能會說更好或者更糟)。這就是說,我試圖說明這個思路。 – asveikau
這是同一枚硬幣的另一面,讓他們通過只有一個功能擺脫殘餘(儘管考慮到,有些表格比其他人更難以看清需求)。 –