我嘗試寫一些函數模板在這樣的一個C++/CLI命名空間:函數模板++/CLI
// header file
namespace MyCLI {
namespace MyFunctions {
template <typename T>
double sum(T a, T b) {
return (double) a + b;
}
}
}
的第一個問題是,當我編譯該項目爲一個dll,並嘗試要使用它,名稱空間MyFunctions不會顯示出來。我認爲,正在發生的事情,因爲我還沒有明確的實例化我的模板,我需要的所有類型,所以我添加下面的頭文件的底部:
extern template double MyCLI::MyFunctions::sum<double>(double,double);
但是,這仍然不給我訪問功能sum
爲double
類型。我懷疑是因爲項目被編譯成託管代碼,這是遵循C#的規則,你不能沒有類沒有功能。所以下次我試圖做一個類的命名空間MyCLI內,使sum
類的這樣的靜態成員:
// header file
namespace MyCLI {
public ref class MyFunctions
{
public:
template <typename T>
static double sum(T a, T b) {
return (double) a + b;
}
};
}
extern template double MyCLI::MyFunctions::sum<double>(double,double);
現在,當我使用匯編我可以看到在MyCLI
的MyFunctions
類,但我仍然無法訪問該類的sum
函數。
如果有人能給我任何關於如何解決這個問題的指示,或者我爲什麼首先面對這個問題,我將非常感激。