静态const成员从文件初始化

时间:2013-08-22 20:26:59

标签: c++ static initialization const

如何使用存储在文件中的值初始化静态const成员?例如:

Class Foo
{
private:
  static const String DataFromFile;
  void InitData (void);
};

我知道一个简短的值,我可以初始化:

const String DataFromFile = "Some Value";

但是如果该值实际上是一个“大”值并加密并存储在磁盘文件中会怎么样?我需要先将其解密,然后再将其放入DataFromFile

有没有办法做到这一点,或者我可以忘记它并将其视为常规变量?也就是说,而不是:

static const String DataFromFile;

我可以将其声明为:

String DataFromFile;

并用函数初始化它?

1 个答案:

答案 0 :(得分:5)

  

如何使用值初始化静态const成员   存储在文件中?例如:

像这样:

//X.h
#include <string>
class X
{
  //...
  static const std::string cFILE_TEXT_;
  static const bool cINIT_ERROR_;
};

//X.cpp
//...#include etc...
#include <fstream>
#include <stdexcept>

namespace {    
std::string getTextFromFile( const std::string& fileNamePath )
{
  std::string fileContents;
  std::ifstream myFile( fileNamePath.c_str() );
  if( !(myFile >> fileContents) );
  {
    return std::string();
  }
  return fileContents;
}
}

const std::string X::cFILE_TEXT_( getTextFromFile( "MyPath/MyFile.txt" ) );
const bool X::cINIT_ERROR_( cFILE_TEXT_.empty() );

X::X()
{ 
  if( cINIT_ERROR_ )
  { 
   throw std::runtime_error( "xxx" ); 
  }
}