2009-10-20 52 views
1

據稱內聯的std :: inner_product()不會與gcc編譯器< GCC 4.1編譯器 內聯,按照以下bug內聯的std :: inner_product

因此,我想實現我自己的版本的inner_product。 是否有現有的實現?

感謝

+1

鏈接已損壞。 – 2009-10-20 17:15:04

+0

Aghh,修復它... – vehomzzz 2009-10-20 17:19:31

+0

我錯過了什麼,或者第三條消息(http://www.mail-archive.com/[email protected]/msg200159.html)是否說這是修補? – 2009-10-20 17:21:40

回答

2

你只需要在你的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; 
} 
1

明顯的實現會是這個樣子:

// 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倍,短標識符節省解析時間...