2015-01-19 2 views
0

У меня есть метод, который принимает строку и использует методы regex, чтобы определить, представляет ли эта строка float, int или string.Лучший шаблон для возврата одного из множества типов данных

Каков наилучший шаблон для возвращаемого результата float, int или string?

Так что мой основной метод прототип:

void interpretString(const std::string &s); 

Что такое лучший способ получить обратно результирующий поплавок, Int или строки? В настоящее время я продлил мой метод следующим образом:

enum dataType { None, String, Float, Int }; 
dataType interpretString(const std::string &s, 
         string &s, 
         float &f, 
         int &i); 

, где данные возвращаются в соответствующих S, F, или я переменные. Это кажется неудовлетворительным, поскольку я передаю данные, которые никогда не будут использоваться (например, если входная строка является поплавком, значения строки и целочисленного значения не будут использоваться)

Есть ли лучший способ?

+1

Использование 'подталкивание :: variant' или определить свой собственный' union'. –

+0

Что-то вроде boost любой может быть хорошим возвращаемым типом. Однако, если вы ограничиваете его плавающей точкой, целым числом или строкой, вы можете использовать объединение с информацией о типе (int, float string). –

ответ

0

Вот еще один способ использования объектов функции:

struct Evaluation_Assignment 
{ 
    virtual void assign(const std::string& s) = 0; 
    virtual void assign(int i) = 0; 
    virtual void assign(double d) = 0; 
}; 

void Interpret_String(const std::string string_to_process, 
         Evaluation_Assignment& processor) 
{ 
    if (interpretation_was_string) 
    { 
    processor.assign(s); 
    } 
} 
+0

Это неполное и, вероятно, имеет низкую производительность. –

+0

Да, это неполное, необходимо заполнить OP. Что касается производительности, это не было критерием. Эта версия хороша, потому что вы можете передавать разные экземпляры для разных назначений. Он представлен в качестве альтернативы. –

Смежные вопросы