在C ++中,函数改变main()中的变量的任何其他方式?

时间:2015-03-04 13:31:35

标签: c++

道歉,如果这个话题已被重新修改了一百万次,但我无法在其他地方找到任何确定的内容,...我只是想知道是否有任何其他方法函数可以更改main()中的变量而不是由:

  • 通过引用函数传递变量
  • 将变量定义为全局

在我的情况下,我在C ++程序中有许多相同的部分,我想将它们分成一个函数,但是这些部分的很大一部分是表单的初始化:<变量> =<一些初始值>。 如果我选择通过引用传递所有变量,那么我将有这些非常长的函数调用,如果可能的话我想避免,... 我可以将所有这些变量声明为全局变量并且只调用没有参数的函数来更改它们,但是由于其他原因应该避免全局变量,...我想我也可以定义一个结构来保存所有这些变量并且只传递一个指向函数结构的指针,但在语义上这看起来很奇怪,因为变量只是松散相关,...

我无法定义main()范围内存在的本地函数来完成这项工作吗?我真正想要的是一种方便的方法来减少程序中的冗余并使其更具可读性 简言之,...

非常感谢,

特里

2 个答案:

答案 0 :(得分:1)

听起来你想要一个lambda函数。如果你有一个支持C ++ 11的编译器,你可以这样做:

int main(int, char**)
{
    int i;
    double d;
    bool b;

    // The [&] part captures variables from the enclosing context by reference
    auto init_func = [&]() {
        i = 1;
        d = 2.0;
        b = false;
    }

    init_func();  // Initializes your variables
    return 0;
}

答案 1 :(得分:0)

如评论中所述:这取决于价值是多少。

假设它们包含一些配置值,我建议将它们放入一个或几个结构或类中。在此假设中,您的值是相关的,因为它们都是配置值(或者可能是运行时状态)。在类中,您还可以添加函数来初始化,读取和写入配置,或者在需要时同步读/写访问。

虽然它与全局变量关系密切(因此有许多优点和缺点),但您可以考虑实现单例模式,而不是将配置对象传递给所有变量。