← index
cplusplus11.Examples/rvalue/rvalue5.cpp
Source: cplusplus11.Examples/rvalue/rvalue5.cpp
#include<iostream>
#include<fstream>
#include<vector>


std::fstream file;
std::vector<std::string> log_entries;

// using universal reference can either be T& or T&&
// Note: Page 178 Effective Modern C++
template<typename T>
void LogToFile(T&& value) {
    file << value;
    log_entries.emplace_back(std::forward<T>(value));
}



int main(void) {
    
    try {
        file.open("test.dat", std::ios::out);
        if(!file.is_open()) {
            std::cerr << "Could not open file..\n";
            return -1;
        }
        
        std::string str;
        for(unsigned int i = 0; i < 500; ++i) {
            str += "0000000\n";
        }

        LogToFile(std::string("Using string\n"));
        
        LogToFile(std::move(str));
        
        LogToFile("Program initalized..\n");
        LogToFile("Using Universal Reference..\n");
        
        
        for(auto &i : log_entries) {
            std::cout << i;
        }
        
    }
    catch(...) {
        std::cerr << "Error occured.\n";
    }
    
    
    file.close();
    
    return 0;
}