在 C++ 中,我将如何创建一个全新的流控制语句?

In C++, how would I create a brand new flow control statement?

我开发了一种算法来将控制标志更改为特定顺序。将它想象成一个计数器或时钟,您可以在其中定义最小值、最大值、步长等。但是每次要用的时候,都需要复制粘贴几行代码,中间改几行。

我在想是否有办法实现这个新的流控制语句。我的问题也可以表述为 "how do I write a function where I require a simple or a compound C++ statement as an argument"?

解决我的问题的另一种方法是找出如何转换以下代码:

int a;
vector<int> av;
for(int i = 0; i < 10; i++)
{
    a = (i > a)? i : i*2;
    av.push_back(a);
}
for(int i = 20; i >= 10; i--)
{
    a = ((a+i)%2 == 1)? 0 : i/2;
    av.push_back(a*3);
}

接近于此:

// definition
void another_for_loop(const int &a, const int &b, const int &inc_, [????] )
{
    inc = (inc_ == 0) ? 1 : inc_;
    if(inc > 0)
    {
        for(int i = min(a,b); i <= max(a,b); i += inc)
            [????];
    }
    else
    {
        for(int i = max(a,b); i >= min(a,b); i += inc)
            [????];
    }
}

// [...]
// inside main{}
int a;
vector<int> av;
another_for_loop(0, 9, 1, {a = (i > a)? i : i*2; av.push_back(a);});
another_for_loop(10, 20, -1, {a = ((a+i)%2 == 1)? 0 : i/2; av.push_back(a*3);});

希望有一个聪明的方法...:-D

即使没有办法,也请告诉我。

解决这类问题的方法叫做策略模式见https://en.wikipedia.org/wiki/Strategy_pattern

您可以使用仿函数和 lambda:

// definition
template <typename F>
void another_for_loop(const int &a, const int &b, const int &inc_, F f)
{
    int inc = (inc_ == 0) ? 1 : inc_;
    if(inc > 0)
    {
        for(int i = min(a,b); i <= max(a,b); i += inc)
            f(i);
    }
    else
    {
        for(int i = max(a,b); i >= min(a,b); i += inc)
            f(i);
    }
}

然后

int a = 0;
vector<int> av;
another_for_loop(0, 9, 1, [&a, &av](int i){a = (i > a)? i : i*2; av.push_back(a);});
another_for_loop(10, 20, -1, [&a, &av](int i){a = ((a+i)%2 == 1)? 0 : i/2; av.push_back(a*3);});