template <typename T, std::size_t N>
static T sum(const std::array<T, N>& a)
{
T result;
// type of result (T) is not determined when pre-process?
#pragma omp parallel for reduction(+: result)
for(int i = 0; i < static_cast<int>(N); i++)
{
result += a[i];
}
return result;
}
我可以使用MSVC和gcc編譯並運行上面的代碼。是的,這非常棒!使用模板類型的OpenMP縮減
但我的問題是在代碼評論; 「因爲結果類型(T)在預處理'#pragma'時未確定,所以編譯器如何驗證結果類型是否適合於OpenMP壓縮?」。
我敢肯定,如果T = double和NG,如果T = std :: string,那麼確定沒問題,但是預處理器如何知道T的類型?
我記得很久以前我無法用一些小的C++編譯器編譯上面的代碼。
讓我問在C++/OpenMP規範的上下文中哪些行爲(可編譯或不可編譯)是正確的。
'#pragma omp'是編譯器支持OpenMP的方向,不是預處理器。 – yohjp 2014-12-06 04:13:28