c ++ variadic function: что является лучшим способом замены? - PullRequest
2 голосов
/ 26 августа 2010

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

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

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

Большинство вариантов с переменными числами, используемых в моем проекте, являются обертками вокруг sprintfили какая-то такая функция.

Ответы [ 2 ]

4 голосов
/ 26 августа 2010

В зависимости от того, насколько укоренились варианты, вы можете оказаться в проигрышном положении в шкале затрат / выгод. Поддержка больших проектов - это всегда баланс между работой с кодом, как он существует, и тем, что вы знаете лучше. Убедитесь, что приложенные вами усилия дают реальную ценность в результате.

Так что с этим предостережением. Поскольку вы упоминаете, что ваши функции построены на основе sprintf, вы можете взглянуть на потоковые классы C ++. Вы можете рассмотреть std :: ostringstream в качестве замены для sprintf. Также может помочь лексическое приведение типа , предоставляемое Boost .

0 голосов
/ 26 августа 2010
  • Используйте подход, как iostreams, с каким-то оператором / функцией, чтобы добавлять элементы по одному.
  • Принять вектор предметов (если они одного типа).
  • Создайте класс, который упаковывает необходимую информацию о параметре и передает только экземпляр этого класса (он может иметь несколько атрибутов, каждый из которых может иметь различную длину, если это необходимо).
...