Я использую VS 6 sp5.
В связи с чем может возникать такая ошибка?
У меня указанная ошибка C1063 возникает при попытке компилировать код использующий мой шаблоный класс map_p.
Этот шаблон был создан для реализации ассоциативного списока следующего вида:
пара значений типов Ty1 и Ty2 ассоциируется со
значением типа Ty3
При этом:
Первое значение из пары уникальный ключ.
Второе значение из пары создает подмножества значений (и соответственно не уникально). Будем называть его родитель.
От класса требуется следующее:
Возможность найти значение по ключу.
Возможность найти родителя по ключу.
Возможность перебирать значения от первого до последнего.
Возможность перебирать значения с заданным родителем от первого до последнего.
Возможность вставлять и удалять значения, разумеется.
Список сортированный и порядок значений в списке задается в первую очередь предикатом Pr2 определяющим порядок значений типа Ty2, во вторую очередь предикатом Pr3 определяющим порядок значений типа Ty3 и в последнюю очередь предикатом Pr1 определяющим порядок значений типа Ty1.
Я реализовал свой шаблон на базе шаблонов STL map и set
template<class Ty1, class Ty2, class Ty3, class Pr3 = less<Ty3>, class Pr1 = less<Ty1>, class Pr2 = less<Ty2> >
class map_p
{
//...
typedef tern< Ty1, Ty2, Ty3 > value_type;
typedef tern_compare< Ty1, Ty2, Ty3, Pr1, Pr2, Pr3 > value_compare;
typedef set< value_type, value_compare >::iterator iterator;
protected:
set< value_type, value_compare > values;
map< Ty1, iterator, Pr1 > keys;
map< Ty2, pair< iterator, iterator >, Pr2 > parents;
//...
}
здесь в values хранятся тройки
ключ,
родитель,
значение
keys связывает
ключ и итератор указывающий на соответствующую тройку в values
parents связывает
родителя и пару итераторов указывающих на первую и последнюю тройку с соответствующим значением родителя в values
на небольших тестовых примерах шаблон работает, правда постоянно выдаеются предупреждения C4786 о том, что identifier was truncated to '255' characters in the browser information
В реальной задаче компиляция приводит к ошибке C1063.
Я предполагаю, что проблема связана с длинной получающихся идентификаторов в первую очередь итератора, в связи с чем возникает два вопроса:
Можно ли как-то обойти проблему не меняя реализации шаблона?
Если менять реализацию всё-таки придется, то каким образом лучше это сделать, что бы ещё раз не наступить на те же грабли?
Если есть необходимость я могу привести полный код реализации данного шаблона.