Created
May 15, 2013 13:22
-
-
Save bechu/5583955 to your computer and use it in GitHub Desktop.
use variadic template to fill string with parameters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <string> | |
#include <iostream> | |
#include <sstream> | |
std::wstring Anchor( int i ) | |
{ | |
std::wstringstream stream; | |
stream << i; | |
std::wstring str = L"{"; | |
str += stream.str() + L"}"; | |
return str; | |
} | |
std::wstring Replace( std::wstring fmtstr, size_t index, const std::wstring& s ) | |
{ | |
size_t pos = 0; | |
std::wstring anchor = Anchor( index ); | |
while( std::wstring::npos != pos ) | |
{ | |
pos = fmtstr.find( anchor, pos ); | |
if( std::wstring::npos != pos ) | |
{ | |
fmtstr.erase( pos, anchor.size() ); | |
fmtstr.insert( pos, s ); | |
pos += s.size(); | |
} | |
} | |
return fmtstr; | |
} | |
std::wstring Format( std::wstring fmt, size_t index ) | |
{ | |
return fmt; | |
} | |
template<typename T, typename... Args> | |
std::wstring Format( std::wstring fmt, size_t index, T& t, Args&... args ) | |
{ | |
std::wstringstream stream; | |
stream << t; | |
std::wstring result = Replace( fmt, index, stream.str() ); | |
++index; | |
std::wstring str = Format( result, index, args... ); | |
return str; | |
} | |
template<typename... Args> | |
void DebugPrint(std::wstring s, Args... args) | |
{ | |
std::wstring str = Format(s, 0, args...); | |
std::wcout<<str<<std::endl; | |
} | |
int main() | |
{ | |
DebugPrint(L"{1} {0}", true, L"Jérôme"); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment