【问题标题】:Define global const variables known at run-time with helper functions (c++)使用辅助函数定义运行时已知的全局 const 变量 (c++)
【发布时间】:2016-01-24 18:04:37
【问题描述】:

我想在 parametrise() 辅助函数中定义一系列全局变量,如下所示:

// helper.h
namespace settings {
  extern const unsigned short something;
}
namespace helper {
  void parametrise(int, char**); // parametrise from command line using boost::program_options
}

// main.cpp
int main( int argc, char** argv) {
  helper::parametrise(argc, argv);
  return 0;
}

// helper.cpp
void helper::parametrise(int, char**) {
  // parse input here
  const unsigned short settings::something = .. // this is what I want to do
}

这段代码当然不能编译,但必须有办法绕过它.. 还是不行?

【问题讨论】:

  • 你为什么使用extern?
  • 如果要修改全局变量 const 则不能声明(通过 argc 和 argv)
  • @Ed 我正在使用 extern '因为否则我必须立即初始化变量,然后,即使我可以稍后更改它的值,也会出现 const-ness..
  • @Dieter,这就是我想要弄清楚的。那么什么是一个不错的选择呢?我需要某种保证 settings::something 在程序的生命周期内不会被意外改变
  • 所以你无法在编译前决定值。那么为什么它不是对象的一部分时是 const

标签: c++ c++11 constants extern boost-program-options


【解决方案1】:

您可以使其仅在该翻译单元内可写,并使其外部为 const,如下所示:

// helper.h
namespace settings {
  extern const unsigned short& something;
}

void parametrise(int, char**);

// helper.cpp
namespace { namespace settings_internal {
  unsigned short something;
}}

namespace settings {
  const unsigned short& something = settings_internal::something;
}

void parametrise(int, char**) { settings_internal::something = 123; }

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多