我需要一個接口來將短消息寫入日誌文件,消息通常包含多個部分,如標識符和值。從簡單的靜態成員函數使用std :: stringstream
爲了做到這一點,我創建了一個類來處理很多次要的東西,比如用時間戳等創建文件名,儘管我不想使用可變參數列表(int nargs, ...)
,所以我想我的最好的選擇是將std::stringstream
代替寫入函數。
我希望能夠將這些調用作爲單行程序寫入,而不必每次都需要創建std::stringstream
,因此我創建了一個靜態成員函數來返回可用於寫入的stringstream對象功能,雖然由於某種原因它不起作用。
MyClass.h
class MyClass {
public:
static std::stringstream& stream();
void write(std::ostream& datastream);
private:
static std::stringstream* _stringstream;
};
MyClass.cpp
std::stringstream* MyClass::_stringstream = new std::stringstream();
std::stringstream& MyClass::stream() {
MyClass::_stringstream->str(std::string());
return *MyClass::_stringstream;
}
void MyClass::write(std::string data) {
this->_fhandle << data << std::endl;
}
void MyClass::write(std::ostream& datastream) {
std::string data = dynamic_cast<std::ostringstream&>(datastream).str();
this->write(data);
}
的main.cpp
MyClass* info = new MyClass();
info->write("Hello, world");
info->write(MyClass::stream() << "Lorem" << ", " << "ipsum");
info->write(MyClass::stream() << "dolor sit" << " amet");
代碼編譯,但是當在執行應用程序,我得到一個std::bad_cast
例外...
這有什麼錯創建每次你登錄時''stringstream'?您每秒記錄多少次? –