如何将 if 命令的条件语句保存为字符串?

how to save the conditional statement of an if command as a string?

我有一个数值算法。我为 R^2 中的点创建了一组 x 和 y 坐标。然后,我使用一个规则来查看哪些点适合我的目的,一个简单的 if 语句如下:

int N = 0;
for (int i1 = -xN; i1 < xN + 1; i1++)
{
    for (int i2 = -yN; i2 < yN + 1; i2++)
    {
        double x = dist(0) * i1;
        double y = dist(1) *i2;
        
        if (sqrt(pow(x, 2) + pow(y, 2)) > 0.8 && abs(x) < 3.1 && abs(y) < 3.91)
        {
            Points.row(N) = trans(vec{ x, y});
            N = N + 1;
        }
    
    }
}

由于我在每个示例中更改了规则(即 sqrt(pow(x, 2) + pow(y, 2)) > 0.8 && abs(x) < 3.1 && abs(y) < 3.91) ,我想知道是否可以将其存储为字符串变量,然后将其与示例的其他参数一起保存在单个文本文件中。像这样:

ofstream myfile;
myfile.open("resultEXAMPLE2D01.txt");
myfile << "xN = [" << xN << "];" << endl;
myfile << "N = [" << output.N << "];" << endl;
myfile << "% Condition is " << cond << endl;
myfile.close();

在这种情况下,“cond”应该是“sqrt(pow(x, 2) + pow(y, 2)) > 0.8 && abs(x) < 3.1 && abs(y) < 3.91”。 所以,在“cond”中,x 和 y 不是变量,我只是把整个事情看成 text/string。但是在 if 语句中我想评估 x 和 y 的一些标准,所以这个“条件”应该是一个函数,有两个双打作为输入和一个 bool 作为输出。 有没有一些直接的方法可以进行这种类型转换?

看来您需要 Stringification。您可以在这里阅读更多相关信息:

因此,您可以定义宏并将您的条件传递给它。在宏中,您可以放置​​您的计算代码,使用传递的条件并将您的条件字符串化(将 #cond 用于 cond 参数)以输出到某个地方(文件,控制台,...)。

示例如下:

int N = 0;

#define Calculate(cond) \
{ \
    N = 0; \
    for (int i1 = -xN; i1 < xN + 1; i1++) \
    { \
        for (int i2 = -yN; i2 < yN + 1; i2++) \
        { \
            double x = dist(0) * i1; \
            double y = dist(1) *i2; \
            \
            if (cond) \
            { \
                Points.row(N) = trans(vec{x, y}); \
                N = N + 1; \
            } \
     \
        } \
    } \
    \
    std::cout << "Condition: " << #cond << std::endl; \
}


int main()
{
    Calculate(sqrt(pow(x, 2) + pow(y, 2)) > 0.8 && abs(x) < 3.1 && abs(y) < 3.91)
    Calculate(x > 0)

    return 0;
}

程序输出:

Condition: sqrt(pow(x, 2) + pow(y, 2)) > 0.8 && abs(x) < 3.1 && abs(y) < 3.91
Condition: x > 0