1

根据以下错误,据称内联 std::inner_product() 不会与 gcc 编译器 < gcc 4.1 编译器内联。

因此,我想实现我自己的 inner_product 版本。是否有现有的实现可用?

谢谢

4

2 回答 2

2

您只需要查看您的 C++ 头文件,找到定义,然后使用“inline”关键字(可能在您的命名空间中)重新定义它。例如,查看我的标题:

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;
}
于 2009-10-20T17:25:53.233 回答
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;
}

使用这样短的标识符可能是有问题的,但是对于像这样存在于标头中的代码,因此它编译了无数次,短标识符可以节省解析时间......

于 2009-10-20T17:46:20.133 回答