2

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

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

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

const String DataFromFile = "Some Value";

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

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

static const String DataFromFile;

我可以将其声明为:

String DataFromFile;

并用函数初始化它?

4

1 回答 1

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" ); 
  }
}
于 2013-08-22T20:37:15.813 回答