模板功能崩溃

时间:2016-09-25 00:19:41

标签: c++ templates c++11

我定义了以下模板函数,它在数组的每个元素上应用函数f

template <typename X, typename Y, size_t n>     
array <Y, n> lod (const function <Y (const X)> f, const array <X, n> w)
{
   array <Y, n> l;
   for (GLint i = 0; i = i + 1; i < n)
      l [i] = f (w [i]);
   return l;
}

作为f的一个例子,我定义了一个函数&#34;添加一个&#34;

template <typename X>
function <X (const X)> ae (const X a)
{
   return [a] (const X x)
   {
      return x + a;
   };
}

然后我尝试应用它

const array <ivec3, 12> oblad = {ivec3 (0, 2, 1), ivec3 (0, 3, 2), ivec3 (0, 1, 5), ivec3 (0, 5, 4),
                                ivec3 (1, 2, 6), ivec3 (1, 6, 5), ivec3 (2, 3, 7), ivec3 (2, 7, 6),
                                ivec3 (3, 0, 4), ivec3 (3, 4, 7), ivec3 (4, 5, 6), ivec3 (4, 6, 7)};

array <ivec3, 12> w = lod (ae (ivec3 (1)), oblad);

程序编译得很好,但执行时崩溃。

1 个答案:

答案 0 :(得分:0)

除了您按值传递数组之外,崩溃的原因很简单:

sub search{                                    
my $file_handle = shift;
while (<$file_handle>)
{
/.print("Hi", "My name is", "[\s]+([A-Za-z_0-9]+)/ ;
push @array, $1;
}
}  

这应该是

for (GLint i = 0; i = i + 1; i < n)

你的循环版本以for (GLint i = 0; i < n; i = i + 1) 为条件,i = i + 1i的所有值返回true,在添加1时不会包裹到0。最后您正在执行测试i < n的每个循环,但结果被忽略。

- 编辑 -

根据the standard,for循环的语法是:

for ( init-statement conditionopt ; expressionopt ) statement

conditionopt是在循环的每次迭代的 start 中测试的条件,expressionopt是在 end 执行的可选表达式每次迭代。