2013-08-22 3 views
1

Как инициализировать статический член const со значением, которое хранится в файле? Например:static const член инициализация из файла

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

Я знаю, в течение короткого значения, я могу инициализировать:

const String DataFromFile = "Some Value"; 

Но что, если значение действительно «большой» значение и зашифрованы и хранятся в файле на диске? Мне нужно расшифровать его, прежде чем положить его в DataFromFile.

Есть ли способ сделать это, или я могу просто забыть об этом и рассматривать его как обычную переменную? То есть, вместо того, чтобы:

static const String DataFromFile; 

можно просто объявить его как:

String DataFromFile; 

и инициализировать его с помощью функции?

+0

Вы можете инициализировать его с помощью функции в любом случае, будь то сопзЬ или статический или оба или ни. – jrok

ответ

5

Как инициализировать элемент static 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"); 
    } 
} 
+1

'static std :: string fileStr_;' - должен ли он содержать 'const'? –

+0

Да, возможно, было бы лучше, если бы оно было постоянным. Я отредактирую его. –

+0

Почему он не компилируется? Нет, здесь нет возможностей C++ 11. Я только что скомпилировал его на http://ideone.com/izpQlU –