Функция, которая возвращает неизвестный тип - PullRequest
8 голосов
/ 31 августа 2009
class Test
{
public:

 SOMETHING DoIt(int a)
 {
  float FLOAT = 1.2;
  int INT = 2;
  char CHAR = 'a';

  switch(a)
  {
  case 1: return INT;
  case 2: return FLOAT;
  case 3: return CHAR;
  }
 }
};


int main(int argc, char* argv[])
{  
 Test obj;
 cout<<obj.DoIt(1);    
    return 0;
}

Теперь, используя знание, что a = 1 подразумевает, что мне нужно вернуть целое число и т. Д., Есть ли в любом случае Doit () может вернуть переменную переменной типа данных?

По сути, чем я могу заменить ЧТО-ТО ?

PS: Я пытаюсь найти альтернативу возвращению структуры / объединения, содержащего эти типы данных.

Ответы [ 13 ]

0 голосов
/ 31 августа 2009

Исходные библиотеки Adobe также имеют adobe::any_regular_t, что позволяет хранить любой тип, пока он моделирует концепцию Regular . Вы бы обернули ваше возвращаемое значение так же, как и с boost::any. (На связанной странице также есть документация о том, чем adobe::any_regular_t отличается от boost::any - конечно, тип, который вы выбираете, должен зависеть от требований вашего кода.)

0 голосов
/ 31 августа 2009

ЧТО-ТО = пусто *

Вам необходимо привести приведенное значение, чтобы вы знали, что возвращается.

void* DoIt(int a)
    {
        float FLOAT = 1.2;
        int INT = 2;
        char CHAR = 'a';

        switch(a)
        {
        case 1: return &INT;
        case 2: return &FLOAT;
        case 3: return &CHAR;
        }
    }
0 голосов
/ 31 августа 2009

Если пользователь знает, что вставлено, вы можете использовать шаблон, чтобы это исправить. Если нет, я не могу придумать никакого решения.

...