LINUX.ORG.RU

можно ли шаблонизировать оператор?

 ,


0

4

Имеется (нешаблонный) класс, для которого есть шаблонные методы, специализированые enum'ом. Соответственно, эти методы можно вызывать ala:

ClassInstance.Method<EnumInstance>(..args..)
возможно ли добиться соответствующего поведения для операторов метода? Например, в хедере класса я могу определить шаблонный оператор:
template <EnumType P> Class& operator[](size_t n)
, и хочу вызывать его в стиле
ClassInstance<EnumInstance>[number]
а есть ли способ написать к нему реализацию/специализацию?

★★★★★

Последнее исправление: thunar (всего исправлений: 1)

ведь ты уже попытался, правда? какой результат?

anonymous
()

Можно. Только вызвать ты его будешь через жопу. Типа a.operator []<param>(); а оно тебе надо?

anonymous
()
ClassInstance<EnumInstance>[number]

Так не получится. Оно же требует такого синтаксиса:

ClassInstance.operator[]<EnumInstance>(number)
Но должно быть можно сделать небольшой wrapper, который бы позволил писать так:
w<EnumInstance>(ClassInstance)[number]
// или так (писать удобнее, но скобки мешаются при чтении)
ClassInstance.w<EnumInstance>()[number]
Где тип/результат вызова w просто передаёт шаблонный аргумент через правильный синтаксис. Правда, для получения правильных типов без хардкода будет нужен C++11.

xaizek ★★★★★
()

Лучше что бы параметр шаблона выводился на основе аргументов метода/оператора.

Оператор ничем от метода не отличается, за исключением синтаксиса. Ну и еще большинство операторов можно перегружать как внешние.

AIv ★★★★★
()

можно, но не нужно

как уже сказали выше, будешь вызывать через задницу

и если тебе такое требуется, значит, с твоим дизайном что-то не так

EugeneBas ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.