2010-09-09 2 views
1

После полезных ответов на мой last question я начал использовать шаблон шаблона шаблона для класса с множеством различных опций. Без реализовав их все, мои текущие объявления для объектов этого класса выглядеть следующим образом:шаблон шаблона шаблона и длинные списки параметров в C++

pc < prg, tc, 9, 0, 4, 4, test, true, true, true, true, false, true, true, 10, 0, -1, 3, 3 > mp; 

Как вы справляетесь со списками параметров долго шаблона? Должен ли я использовать enums/определяет вместо true/false и числа? Существуют ли обычно используемые альтернативы?

+1

Разделить класс вверх, это, вероятно, слишком много. – GManNickG

ответ

4

Да, используйте enums (не определяет) вместо true/false. Таким образом, если вы получите параметры не в порядке, тогда компилятор будет жаловаться. Кроме того, это гораздо яснее для читателей.

Что касается общения с длинными списками параметров вообще, спрячьте их за typedef или генератор, который исправляет некоторые параметры шаблона и позволяет вам изменять другие параметры.

+0

Я предполагаю, что «генератор» означает нечто вроде 'template struct simple_pc {typedef pc <длинный список с некоторыми фиксированными значениями> T; }; '? Это звучит неплохо. – Thomas

+0

Да, вот что я имел в виду. –

1

Я бы передал один аргумент, который представляет собой набор типа варианта, например std :: vector.

+0

Я этого не делал, потому что мне нужна оптимизация компилятора для констант параметров шаблона, а не для оценки элементов коллекции во время выполнения. – Thomas

2

Я не делаю C++, и это может плохо относиться к шаблону, но то, что я попытаюсь сделать с обычным методом с длинным списком параметров, - найти связанные параметры и попытаться их сгруппировать и ввести объекты параметров отражающие группировку, так что у вас есть более короткий список более сложных параметров.

+0

Разумный совет действительно :) –

+0

Мне потребовалось некоторое время, чтобы понять, что это предложение применимо и к моему шаблону сценария, а также приводит к хорошему дизайну: определите некоторые подтипы, которые принимают некоторые параметры (в соответствии с тем, которые созданы методом шаблона pattern), и пусть исходный класс принимает только подтипы в качестве параметров и наследует их. – Thomas

+0

@Thomas: Приятно было услышать, что это было полезно в этом контексте. Мне нужно будет освежить мой C++ и посмотреть на него когда-нибудь. –

5

Я предпочел бы пересмотреть свой дизайн, если бы у меня был список параметров шаблона, который долго. Многие параметры часто указывают на плохой дизайн.

Смежные вопросы