Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1.  
  2. struct IParser
  3. {
  4. virtual void Parse(const char *) = 0;
  5. };
  6.  
  7. template<typename Ty>
  8. struct ArgParser : public IParser
  9. {
  10. const Ty & mValue;
  11.  
  12. ArgParser(const Ty & value) : mValue(value) { }
  13.  
  14. void Parse(const char * formatting) override
  15. {
  16. // invoke type-specific parser via specialization or free function
  17. }
  18. };
  19.  
  20. int FormatInternal(const char* format, char*, size_t, IParser* parsers[], size_t numParsers);
  21.  
  22. template<typename Ty>
  23. ArgParser<Ty> MakeArgParser(const Ty & value) { return ArgParser<Ty>(value); }
  24.  
  25. template<class ... Ts>
  26. unsigned Format(const char* format, char* dest, unsigned capacity, Ts... args)
  27. {
  28. IParser* parsers[] = { &MakeArgParser(args)... };
  29. return FormatInternal(format, dest, capacity, parsers, 2);
  30. }
  31.  
  32. int main()
  33. {
  34. char Buffer[1024];
  35.  
  36. Format( "One argument {}", Buffer, 1024, 10);
  37. Format( "Two {} arguments {} ", Buffer, 1024, 10, "hello");
  38.  
  39. return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement