Подпись функции, которая может, возвращает один сдержись

Хороший у меня есть следующее сомнение.

У меня есть следующий сдержись.

#ifndef ATOM_H_
#define ATOM_H_


#include "Print.h"
//#include "Elemento.h"
template <typename T>

class Atom{
    T atomo;
public:
    Atom(T elemento_aux);
    ~Atom();
    T evaluar();
    void print(Print& print);
};

#endif /*ATOM_H_*/

И у меня есть функция, которая может возвращать один Atom<int> или Atom<string> мое сомнение такое, как это должна бы быть подпись функции?

Я попытался с

Atom<> funcion();

Atom funcion();

Atom* funcion();

Как он был бы?

Идея была бы чем-то из стиля

funcion("1"):Atom<int>

funcion("a"):Atom<string>

Предполагая, что существует характерный способ говорить, что функция возвращает Atom любого типа, существует форма castear?

Костлявая делать что-то этим стилем?

Atom<int> atomo = funcion("1").

Большое спасибо во время. Привет!

2
задан 16.04.2016, 22:24
1 ответ

C ++ он не позволяет, основания, осуществлять функции изменяя только стоимость возврата. Это затрагивает также templates функций.

Прием, который может делаться, чтобы спасать этот препятствие, - способствуя тому, чтобы стоимость возврата функции пришла предоставляемый "снаружи" одним, сдержись помощник:

template<class T>
struct ReturnHelper
{
  typedef T ReturnType;
};

template<class T>
ReturnHelper<T>::ReturnType funcion(/* ... */ )
{ /* ... */ }

Этот механизм может дополнять легко. Если, например, для специализации float хотят, чтобы возвратился один double возможно осуществлять специализацию helper:

template<>
struct ReturnHelper<float>
{
  typedef double ReturnType;
};

На этой теме есть различные версии, но основание, на котором они поддерживаются, - то же самое всегда.

Приветствие.

1
ответ дан 24.11.2019, 14:34