據稱內聯的std :: inner_product()不會與gcc編譯器< GCC 4.1編譯器 內聯,按照以下bug。內聯的std :: inner_product
因此,我想實現我自己的版本的inner_product。 是否有現有的實現?
感謝
據稱內聯的std :: inner_product()不會與gcc編譯器< GCC 4.1編譯器 內聯,按照以下bug。內聯的std :: inner_product
因此,我想實現我自己的版本的inner_product。 是否有現有的實現?
感謝
你只需要在你的C++頭文件一看,發現了定義,並與「內聯」關鍵字(可能在你的命名空間)重新定義它。例如,看着我的頭:
template <class T1, class T2, class T> inline T inner_product(T1 first1, T1 last1, T2 first2, T init)
{
for (; first1 != last1; ++first1, ++first2) init = init + *first1 * *first2; return init;
}
明顯的實現會是這個樣子:
// warning: untested code:
template <class I1, class I2, class T>
T inline inner_product(I1 s1, I1 e1, I2 s2, T i) {
while (s1!=e1) {
i = i + ((*(s1)) * (*(s2)));
++(s1);
++(s2);
}
return i;
}
template <class I1, class I2, class T, class B1, class B2>
T inline inner_product(I1 s1, I1 e1, I2 s2, T i, B1 b1, B2 b2) {
while (s1!=e1) {
i=b1(i, b2(*(s1), *(s2)));
++(s1);
++(s2);
}
return i;
}
使用這樣短的標識符可能是有問題的,但對於這樣的代碼,生活在一個頭等等它編譯了gazillion倍,短標識符節省解析時間...
鏈接已損壞。 – 2009-10-20 17:15:04
Aghh,修復它... – vehomzzz 2009-10-20 17:19:31
我錯過了什麼,或者第三條消息(http://www.mail-archive.com/[email protected]/msg200159.html)是否說這是修補? – 2009-10-20 17:21:40