Контракты кода, Вы будете использовать их?

Я чувствую, что упускаю что-то очевидное, но до сих пор не могу понять это

Вы сделали. И это то, с чего вы на самом деле начали: «просто используйте v-версию этих функций» . Причина, по которой эти функции получили v-версию, состояла в том, чтобы позволить, как вы это назвали, соединить их Поэтому, если вы хотите поддержать ее для своей собственной функции, похожей на printf, обязательно следуйте той же практике:

void direct_v(const char * _fmt, bool _extra, va_list args){
    char ca[200];
    vsprintf(ca, _fmt, args);
    std::cout << ca << std::endl;
}

void direct(const char * _fmt, bool _extra...){
    va_list args;
    va_start(args, _extra);
    direct_v(_fmt, _extra, args);
    va_end(args);
}

void chained(const char * _fmt...){
    va_list args;
    va_start(args, _fmt);
    direct_v(_fmt, false, args);
    va_end(args);
}

Хорошее появляющееся свойство разделения direct, подобное тому, что вы получаете лучшее разделение проблемы. Оболочка выполняет связанный бит va_list, а v-функция заботится только о том, что нужно сделать со списком, что позволяет здесь использовать повторно.


Примечание перед редактированием: Кстати, если совместимость с C действительно важна, прототипы функций нуждаются в запятой, чтобы отделить последний аргумент от многоточия. Синтаксис, который вы использовали, - только C ++.

9
задан Renaud Bompuis 25 February 2009 в 03:43
поделиться

3 ответа

Я думаю, что большинство разработчиков, использующих c# 4.0, будет использовать их сам включенный особенно при создании библиотеки, которую Вы планируете подвергнуть любому. Это может сделать Ваш код более подробным в областях, но преимущества, которые это имеет, должны перевесить строки кода и проведенное время.

7
ответ дан 4 December 2019 в 22:30
поделиться

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

0
ответ дан 4 December 2019 в 22:30
поделиться

Что Вы имеете в виду, смерть Spec#? Это - следующая эволюция Spec#.

И, да, я планирую использовать их.

1
ответ дан 4 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: