88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
1

Виртуальные функции и тип auto

24.10.2014, 15:20. Показов 1370. Ответов 8
Метки нет (Все метки)

Хочу написать генератор рандомных значений разных типов как это можно реализовать? вот наброски (но при использ. аuto не компилируется):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class BaseGenerator
{
public:
    virtual auto gen() = 0; 
};
 
class StringGenerator
{
public:
    auto gen()
    {
        std::string result;
        ...
        return result;
    }
};
 
class StringGenerator
{
public:
    auto gen()
    {
        std::pair<int, int> result;
        ...
        return result;
    }
};
в конечном итоги нужно получить что то наподобие такого:

C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    BaseGenerator* ptr = new StringGenerator;
    std::string str = ptr->gen();
    
    ...
    
    ptr = new PairGenerator;
    std::pair<int, int> pr = ptr->gen();
    ...
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2014, 15:20
Ответы с готовыми решениями:

Тип auto, вложенные функции и какого фига?
Разбираясь в чужом коде наткнулся на подобный код: void...

Как определить тип возвращаемого значения шаблонной функции по типу итератора (не auto)?
Здравствуйте. Есть шаблонная функция (например, суммирования). Входные значения два итератора --...

Некорректно работают функции Auto-Tone, Auto contrast, Auto color
Не корректно работают функции Auto-Tone, Auto contrast, Auto color. Вот пример (как на картинке)....

Виртуальные и чисто виртуальные функции
Чем они отличаются?? если можно, с примерами. И как из виртуальной функции сделать чисто...

8
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
24.10.2014, 15:22 2
Хулиган, функции не перегружаются по возвращаемому значению, и auto тут совершенно не у дел.
0
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
24.10.2014, 15:27  [ТС] 3
0x10, ну поэтому я в сторону auto и смотрел, можно как то подменить возвращаемый тип, без использования шаблонов?
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.10.2014, 15:28 4
Хулиган, Общий тип для всего. boost::any. Но потом придется все равно смотреть что хранится в boost::any. void*.
0
5224 / 3196 / 362
Регистрация: 12.12.2009
Сообщений: 8,101
Записей в блоге: 2
24.10.2014, 15:35 5
как вариант еще boost::variant можно использовать, если все генераторы заранее известны.
0
Эксперт по математике/физикеЭксперт С++
1989 / 1319 / 379
Регистрация: 16.05.2013
Сообщений: 3,423
Записей в блоге: 6
24.10.2014, 16:12 6
Ответ на все вопросы - зачем? Что понимается под сучайной строкой? А под парой? А под вектором? А под пользовательским типом? Постановка задачи сродни средневековым шарлотанским лекарствам "от всего". Невозможно написать генератор не зная наперед структуру используемого типа.
Хорошо допусти вы хотите написать общий интерфейс для для заранеее известного набора типов. тогда почему бы не пользоваться фабричным методом?
0
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
24.10.2014, 16:56  [ТС] 7
Цитата Сообщение от Ilot Посмотреть сообщение
Хорошо допусти вы хотите написать общий интерфейс для для заранеее известного набора типов. тогда почему бы не пользоваться фабричным методом?
Для того что бы использовать фабричный метод, генерируемое значение должно быть потомком абстрактного типа, в моем случае это не так!

Цитата Сообщение от Ilot Посмотреть сообщение
Ответ на все вопросы - зачем? Что понимается под сучайной строкой? А под парой? А под вектором? А под пользовательским типом? Постановка задачи сродни средневековым шарлотанским лекарствам "от всего".
к примеру есть пользовательский тип "Type", добавляю подкласс генератора: TypeGenerator, который генерирует значение типа Type. Задача не реальная, так просто в голову пришло...
0
Эксперт по математике/физикеЭксперт С++
1989 / 1319 / 379
Регистрация: 16.05.2013
Сообщений: 3,423
Записей в блоге: 6
24.10.2014, 17:11 8
Цитата Сообщение от Хулиган Посмотреть сообщение
Для того что бы использовать фабричный метод, генерируемое значение должно быть потомком абстрактного типа, в моем случае это не так!
Потомком должен быть генератор. Вместо оператора new фабрика, вместо ваших классов генераторов фабричные.
0
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
24.10.2014, 19:44  [ТС] 9
Цитата Сообщение от Ilot Посмотреть сообщение
Потомком должен быть генератор. Вместо оператора new фабрика, вместо ваших классов генераторов фабричные.
ну и у фабрики то должен быть метод
C++
1
2
3
4
BaseType* Create()
{
    return new SomeType;
}
где SomeType является потомком BaseType?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2014, 19:44
Помогаю со студенческими работами здесь

Почему тип auto недопустим?
Доброго, разбираюсь с auto, имеется вот такой код: #include &lt;iostream&gt; using namespace std; ...

Тип auto в старых версиях компиляторов
Здравствуйте. Пытаюсь работать с данным циклом, но компилятор выдаёт ошибки. У меня не новая версия...

Заменить auto на необходимый тип итератора
Есть структура typedef std::vector&lt;std::string&gt; Resp; struct View { // объявляем структуру для...

Специализация и шаблон, возвращающий тип auto
template &lt;class T&gt; auto f(T a, int b)-&gt;decltype( *a ); template &lt;&gt; char * f&lt;&gt;(char *g, int); ...

Какой будет тип у переменной auto, которой присвоили лямда-функцию
Добрый день. Скажите пожалуйста, какой тип будет у переменной auto, которой присвоили лямбда...

Непонятен синтаксис определения функции (параметр функции - auto)
Моё казино с &quot;auto&quot;, &quot;-&gt;&quot; и шаблонными функциями Думаю, неплохое озаглавие для этой темы. Ну...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru