0

我已经实现了一个算法,该算法有一个强大的用例,可以尽快知道在整个库执行期间将计算的最大问题大小,以便可以有效地预先计算所需的内存(矩阵、向量等) -分配。“尽快”定义为甚至早于或不晚于 C++ 静态初始化触发时,例如

  /**
   * Example of what I would like to accomplish but of course this 
   * System#getProperty is the Java way
   */
  class texample {
      static const int MAX_M_N;
  }

  const int texample::MAX_M_N = System.getProperty("maxMN");  // possible? how?

我当然可以使用动态初始化和分配来做到这一点,但如果在静态初始化期间“看到”这些输入参数属性,它会简单得多。原因是静态初始化/分配的包装对象实例也会被静态销毁过程破坏,我不必担心它,例如处理异常和手动释放/删除实例。

更新:还有一件事:) 我想拥有这个而不必重新编译。我当然可以使用宏(我正在使用 CMake),因此很容易更改 CMakeList.txt 文件中的宏并重新编译,但我希望在运行时动态指定大小。

4

1 回答 1

1

如果从环境中读取是可以接受的,你可以试试这个:

#include <cstdlib>

int readme(char const * envname)
{
    char * e, * env = std::getenv(envname);

    if (!env)
    {
        std::cerr << "Environment '" << envname << "' missing, aborting.\n";
        std::exit(0);
    }

    int res = std::strtol(env, &e, 0);

    if (*e != 0)
    {
        std::cerr << "Environment '" << envname << "' unparsable (contains '" << env << '"), aborting.\n";
        std::exit(0);
    }

    return res;
}

int const texample::MAX_M_N = readme("maxMN");  // #1

请注意,“#1”行是在程序的动态初始化阶段执行的,这是第一次执行用户代码,并且在main调用之前完成。

于 2012-08-13T11:38:12.140 回答