Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct IParser
- {
- virtual void Parse(const char *) = 0;
- };
- template<typename Ty>
- struct ArgParser : public IParser
- {
- const Ty & mValue;
- ArgParser(const Ty & value) : mValue(value) { }
- void Parse(const char * formatting) override
- {
- // invoke type-specific parser via specialization or free function
- }
- };
- int FormatInternal(const char* format, char*, size_t, IParser* parsers[], size_t numParsers);
- template<typename Ty>
- ArgParser<Ty> MakeArgParser(const Ty & value) { return ArgParser<Ty>(value); }
- template<class ... Ts>
- unsigned Format(const char* format, char* dest, unsigned capacity, Ts... args)
- {
- IParser* parsers[] = { &MakeArgParser(args)... };
- return FormatInternal(format, dest, capacity, parsers, 2);
- }
- int main()
- {
- char Buffer[1024];
- Format( "One argument {}", Buffer, 1024, 10);
- Format( "Two {} arguments {} ", Buffer, 1024, 10, "hello");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement