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

Шаблоны - C++

Восстановить пароль Регистрация
 
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
08.07.2015, 12:33     Шаблоны #1
В файле есть такое определение
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-ух словах объяснить?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2015, 12:33     Шаблоны
Посмотрите здесь:

C++ шаблоны в си++
C++ Шаблоны
Шаблоны С++ C++
Шаблоны C++
C++ Шаблоны и т.д.(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
08.07.2015, 13:30     Шаблоны #2
Цитата Сообщение от klynxe Посмотреть сообщение
Вообще говоря не совсем понимаю как вот это работает
вызов
C++
1
CartoType::TTextLiteral(layer, "car");
разворачивается в
C++
1
CartoType::TTextBuffer<sizeof("car")> layer("car");
подробнее про макросы можете прочитать например здесь
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
08.07.2015, 13:47  [ТС]     Шаблоны #3
Цитата Сообщение от Cra3y Посмотреть сообщение
разворачивается в
CartoType::TTextBuffer<sizeof("car")> layer("car");
То есть я не могу изменить значение этой переменной?
То есть объявить ее пустой
CartoType::TTextBuffer<sizeof("")> layer("");
а далее проинициализировать?
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
08.07.2015, 14:14     Шаблоны #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от klynxe Посмотреть сообщение
То есть я не могу изменить значение этой переменной?
можно получить указатель на буфер с помощью WritableText(), но нельзя изменить размер этого буфера - он задается на этапе компиляции
можно задать размер побольше
C++
1
CartoType::TTextBuffer<1024> layer("");
Yandex
Объявления
08.07.2015, 14:14     Шаблоны
Ответ Создать тему
Опции темы

Текущее время: 17:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru