![]() |
[C++ TEMPLATE] Static variable inside a templated function
Hi all,
the following function writes n bits data to file. Parameter named 'Data' contains the value to be written, 'Length' contains the number of bits of 'Data' to write. This function uses a static buffer named BitBuffer to store bits between calls. When BitBuffer is full it is written to file. void WriteBitsToFile(unsigned Data, unsigned Length, std::ofstream & OutFile) { static unsigned BitBuffer = 0; static unsigned BitCounter = 0; for (unsigned i = Length; i --; ) { (BitBuffer <<= 1) |= ((Data >> i) & 0x1); BitCounter ++; if (BitCounter == 32) { OutFile.write((char *) & BitBuffer, sizeof(BitBuffer)); BitCounter = 0; } } TotalBitCounter += Length; } The function works fine, but if I change 'Data' to a templated variable, BitBuffer gets flushed to 0 at every call, so it does not retains values between calls. Please note that calls are made always with the same type for T2 (int) so if I am not wrong it would retain the value but it doesn't. Why? template <typename T2> void WriteBitsToFile(T2 Data, unsigned Length, std::ofstream & OutFile) { static unsigned BitBuffer = 0; static unsigned BitCounter = 0; for (unsigned i = Length; i --; ) { (BitBuffer <<= 1) |= ((Data >> i) & 0x1); BitCounter ++; if (BitCounter == 32) { OutFile.write((char *) & BitBuffer, sizeof(BitBuffer)); BitCounter = 0; } } TotalBitCounter += Length; } Thank you all for help. |
Re: [C++ TEMPLATE] Static variable inside a templated function
Your question is about C++. You have posted in a newsgroup which is not
about C++. I urge you to consider posting your question in comp.lang.c++. > Thank you all for help. Glad to be of service. -s -- Copyright 2010, all wrongs reversed. Peter Seebach / usenet-nospam@seebs.net http://www.seebs.net/log/ <-- lawsuits, religion, and funny pictures http://en.wikipedia.org/wiki/Fair_Game_(Scientology) <-- get educated! |
| All times are GMT. The time now is 01:07 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.