所以其他人已經解釋了爲什麼你的代碼不工作以及如何改進。
現在我將告訴您如何仍然得到下面的代碼編譯 - 和正常工作:
double* a = CreateArray(5);
int* b = CreateArray(7);
的問題,前面已經提到的,是C++不從推斷模板參數僅返回類型。
您可以通過使上述函數返回一個簡單的代理對象來繞過這個限制。代理對象具有單個操作:(隱式)轉換爲T*
。這是實際分配發生的地方。
因此CreateArray
功能很簡單(不模板):
CreateArrayProxy CreateArray(std::size_t num_elements) {
return CreateArrayProxy(num_elements);
}
至於代理:
struct CreateArrayProxy {
std::size_t num_elements;
CreateArrayProxy(std::size_t num_elements) : num_elements(num_elements) { }
template <typename T>
operator T*() const {
return new T[num_elements];
}
};
容易爲π。
現在,你應該使用這個代碼?不,可能不是。它不提供直接分配的真正優勢。但這是一個有用的習語。
你面臨什麼問題? – sharptooth 2011-04-01 12:48:24
爲什麼你想自己創建一個數組,當std :: vector會爲你做? – 2011-04-01 17:16:00
我想創建一個n * n * n的數組。所有這些都是一個特例。 – ObiSan 2011-04-02 00:24:09