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

Копирование значение шаблона - C++

Восстановить пароль Регистрация
 
slowCheetah
11 / 11 / 1
Регистрация: 18.07.2009
Сообщений: 123
02.10.2011, 10:35     Копирование значение шаблона #1
Всем доброе утро!

С шаблонами стараюсь не работать, (ну или не работаю обычно ; ) ), а тут вдруг для лабы в институт решил аккуратный шаблонный класс сделать.

Ну все банально, что-то вроде этого:
C++
1
2
3
4
5
    template <typename TKey>
    class CSomeClass : public ISomeInterface<TKey> {
             TKey m_Key;
             /// ...
        }
и метод там же, примерно вот такой:

C++
1
2
3
4
5
6
7
    template <typename TKey> 
    BOOL CSomeClass<TKey>::DoSomeStuff(const TKey& key)
        {
           /// ...
           m_Key = key;
           /// ...
        }
и вся вот эта банальная простота работает прекрасно вроде (по-крайней мере, проверял на арифметических типах), но вот если приходится работать с std::string, wstring, tstring (ну вы поняли), то значение по-просту не копируется в m_Key и всегда получается пустая строка, а почему и что делать никак не пойму блин, может быть кто-то может помочь?

кстати, такой вопрос еще, как говорил уже с шаблонами не вожусь обычно и вдруг вот заметил такую штуку - одни компиляторы нормально относятся к тому, что реализация шаблонного класса лежит в другом файле, а другие нет, у страуструпа написано, что вроде бы все должно быть в одном файле и никак иначе, и что же это тогда получается, если так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
02.10.2011, 13:09     Копирование значение шаблона #2
а покажи как с целыми работает, а со строкой нет?

по 2 вопросу больше чем "вроде как" сложно что-то сказать. лучше в 1 файле их содержать)
slowCheetah
11 / 11 / 1
Регистрация: 18.07.2009
Сообщений: 123
02.10.2011, 19:02  [ТС]     Копирование значение шаблона #3
Цитата Сообщение от slowCheetah Посмотреть сообщение
Возник еще один вопрос ) опять по теме шаблонов из той же серии лабораторных работ )

теперь уже другая структура данных - хэш-таблица ) решил опять же реализовать тот же самый интерфейс, все сделать естественно на шаблонах и алгоритм вычисления хэша передевать через параметр шаблона - должен быть реализован функциональный объект (ну т.е. operator () )

вот и, собственно, код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    /**
     * Вставка нового элемента в таблицу.
     *
     * @param key Значение ключа добавляемого элемента.
     */
    template <int Size, typename TKey, typename THasher> 
    BOOL CHashTable<Size, TKey, THasher>::Insert(const TKey& key)
    {
        THasher hasher;
        TableIndex index = hasher(key, Size);
        if (index >= 0 && index < Size)
        {
            if ( m_Table[index].pItems->IsEmpty() )
                 m_Table[index].pItems = GetItemsContainers();
            
            return m_Table[index].pItems->Insert(key); 
        }
 
        return FALSE;
    }
где THasher - то, что как раз является функциональным объектом, реализующим этот самый алгоритм хэширования

и вот, опять же, самая банальная специализация для любимых мною очень строк tstring:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class CTStringHasher 
{
public:
    Containers::TableIndex operator() (const tstring& operand, int Size)
    {
        int nSumm = 0;
        for (int index = 0; index != operand.size(); ++index)
            nSumm += static_cast<int> ( operand[index] );
 
        return (Containers::TableIndex) (nSumm % Size);
    }
};
где Containers::TableIndex - это вот такое:
C++
1
typedef int TableIndex;
определенно в том же самом пространстве имен

при компиляции этого кода ругается вот так:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const int' (or there is no acceptable conversion) c:\program files\microsoft visual studio 9.0\vc\include\xutility 3133

может быть кто-то знает почему?
неужели никто с таким не встречался и не знает почему возникает такая ошибка?
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.10.2011, 21:00     Копирование значение шаблона #4
из приводимого тобою кода и описания, ничего понять не возможно.
Yandex
Объявления
02.10.2011, 21:00     Копирование значение шаблона
Ответ Создать тему
Опции темы

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