Problem durch Übergabe von Kopie [std::transform]



  • hi,

    folgender Code:

    struct ConvertChar2MorseCode
    {
    	explicit ConvertChar2MorseCode(const CMorseCode& MC) : m_MorseCodeTable(MC) {}
    	std::string operator()(char c)
    	{
    		std::string MorseCode = m_MorseCodeTable.getMorseString(c);
    
    		updateStatistics(c);
    
    		return MorseCode;
    	}
    
    	void updateStatistics(char c)
    	{
    		if(' ' == c)
    		{
    			++m_ConversionStatistics.words;
    			return;
    		}
    
    		if(m_MorseCodeTable.IsIn(c))
    		{
    			++m_ConversionStatistics.characteres;
    		}
    	}
    
    	const stats& getStatistics() const {return m_ConversionStatistics;}
    
    private:
    	CMorseCode	m_MorseCodeTable;
    	stats		m_ConversionStatistics;
    };
    
    void encodeMorseFile(std::istream& input, std::ostream& output)
    {
    	std::istreambuf_iterator<char> inpos(input);
    	std::istreambuf_iterator<char> endpos;
    
    	std::ostream_iterator<std::string> outIter(output, "");
    
    	ConvertChar2MorseCode cc2mc((CMorseCode()));
    
    	std::transform(inpos, endpos, outIter, cc2mc);//cc2mc kopie
    
    	const stats& Statistic = cc2mc.getStatistics();
    	std::cout << Statistic;
    }
    

    stats ist ein struct aus zwei int Variablen und einer Ausgabeoperator.

    Da ich nun mitbekommen hab das der functor bei std::transform als Kopie übergeben wird, existieren ja später die Statistic Werte nicht mehr.
    Was müsste ich jetzt machen um in der Funktion encodeMorseFile diese Werte doch noch zu erhalten?

    Heimwerkering

    P.S. - sollte etwas unklar sein, bitte nachfragen

    P.P.S. - jaja ich weiß mieser Topic Titel (mir viel nur auf die schnelle nicht besseres ein)



  • Okay hat sich schon erledigt
    - man steht aber auch manchmal auf dem schlauch

    Heimwerkerking


Anmelden zum Antworten