Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 542
#1

Шаблоны - C++

08.07.2015, 12:33. Просмотров 235. Ответов 3
Метки нет (Все метки)

В файле есть такое определение
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
28
29
30
template<int32 aMaxLength> class TTextBuffer: public MString
    {
    public:
    /** Construct an empty TTextBuffer object. */
    TTextBuffer() { }
 
    /** Construct a TTextBuffer object from an 8-bit ASCII string. */
    TTextBuffer(const char* aText)
        {
        iLength = 0;
        while (*aText && iLength < aMaxLength)
            iText[iLength++] = *aText++;
        }
 
    // virtual functions from MString
    const uint16* Text() const { return iText; }
 
    private:
    // virtual functions from MString
    bool Writable() const { return true; }
    int32 MaxWritableLength() const { return aMaxLength; }
    uint16* WritableText() { return iText; }
    TResult Resize(int32 aNewLength)
        { return aNewLength <= aMaxLength ? KErrorNone : KErrorTextTruncated; }
 
    uint16 iText[aMaxLength];
    };
 
/** A macro to define a TTextBuffer object from an ASCII string literal. */
#define TTextLiteral(aName,aText) TTextBuffer<sizeof(aText)> aName(aText)
в коде я пишу
C++
1
CartoType::TTextLiteral(layer, "car");
а можно как-то создать переменную layer, а затем ее инициализировать?

Вообще говоря не совсем понимаю как вот это работает
C++
1
#define TTextLiteral(aName,aText) TTextBuffer<sizeof(aText)> aName(aText)
может кто в 2-ух словах объяснить?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2015, 12:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблоны (C++):

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». - C++
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких...

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис) - C++
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны - C++
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов...

Шаблоны С++ - C++
template &lt;typename T_sizeCapacity&gt; class SomeClass { public: T_sizeCacity size; }; Как сделать чтобы T_sizeCapacity мог быть...

Шаблоны - C++
Здравствуйте. Читая про шаблоны в Википедии (https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_C%2B%2B) ...

Шаблоны - C++
Пусть есть шаблон-структура. template &lt;class Data&gt; struct A { Data p; }; И есть указатели на объекты: A&lt;int&gt; *b; ...

3
Max Dark
шКодер самоучка
1849 / 1649 / 603
Регистрация: 09.10.2013
Сообщений: 3,676
Записей в блоге: 6
Завершенные тесты: 2
08.07.2015, 13:30 #2
Цитата Сообщение от klynxe Посмотреть сообщение
Вообще говоря не совсем понимаю как вот это работает
вызов
C++
1
CartoType::TTextLiteral(layer, "car");
разворачивается в
C++
1
CartoType::TTextBuffer<sizeof("car")> layer("car");
подробнее про макросы можете прочитать например здесь
1
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 542
08.07.2015, 13:47  [ТС] #3
Цитата Сообщение от Cra3y Посмотреть сообщение
разворачивается в
CartoType::TTextBuffer<sizeof("car")> layer("car");
То есть я не могу изменить значение этой переменной?
То есть объявить ее пустой
CartoType::TTextBuffer<sizeof("")> layer("");
а далее проинициализировать?
0
Max Dark
шКодер самоучка
1849 / 1649 / 603
Регистрация: 09.10.2013
Сообщений: 3,676
Записей в блоге: 6
Завершенные тесты: 2
08.07.2015, 14:14 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от klynxe Посмотреть сообщение
То есть я не могу изменить значение этой переменной?
можно получить указатель на буфер с помощью WritableText(), но нельзя изменить размер этого буфера - он задается на этапе компиляции
можно задать размер побольше
C++
1
CartoType::TTextBuffer<1024> layer("");
0
08.07.2015, 14:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2015, 14:14
Привет! Вот еще темы с ответами:

Шаблоны - C++
Выполнить задание без использования библиотеки стандартных шаблонов. а) Создать шаблонную функцию поиска по заданному ключу. Функция...

Шаблоны C++11 - C++
#include &lt;iostream&gt; template&lt;typename T1, typename T2&gt; auto func(T1 a, T2 b) -&gt; decltype(a&gt;b?b:a) { return a&gt;b?b:a; ...

Шаблоны - C++
Не пойму что я неправильно делаю. Как не переделывал, всё равно не получалось. Может кто сможет чем помочь. А задача следующая-надо было...

Шаблоны С++ - C++
Есть функция Merge из алгоритма сортировки слиянием, она объединяет два массива A и B, результат записывает в массив C: template&lt;class T&gt;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru