IDE C++, который поддерживает совет Scott Meyer: Предпочтите не являющегося членом недруга функции по участникам

Ну, я думаю, что что-то отсутствует здесь. Пользователь хочет получить данные с прошлого года а не с прошлых 365 дней. Существует огромное различие. По-моему, данные с прошлого года являются каждыми данными с 2007 (если я в 2008 теперь). Таким образом, правильный ответ был бы:

SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE()) - 1

Тогда, если Вы хотите ограничить этот запрос, можно добавить некоторый другой фильтр, но всегда ищущий в прошлом году.

SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE()) - 1 AND DATE > '05/05/2007'
5
задан Benoît 11 November 2009 в 11:11
поделиться

4 ответа

Я сталкивался с этим в прошлом.

Моя идея тогда была довольно неуклюжей, но свою работу выполнила: пространства имен.

То, что я сделал, было

namespace myclass
{
    class MyClass
    {
        ...
    };

    MyClass operator+(const MyClass& lhs, const MyClass& rhs){...}
}
5
ответ дан 13 December 2019 в 19:29
поделиться

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

Он действительно отмечает, что разработчик библиотеки не обязательно будет писать функции для каждого возможного использования класса (поскольку могут быть случаи, когда они не думают). Это означает, что вам, возможно, придется самостоятельно добавить «вспомогательные» функции, не являющиеся членами, как если бы они следовали совету Мейерса.

4
ответ дан 13 December 2019 в 19:29
поделиться

Я не верю, что среда IDE может сообщить вам все функции, не являющиеся членами, которые вы можете использовать с вашим классом. Используя шаблоны, просто слишком сложно составить список всех таких функций. ИМО, лучшее, на что вы можете надеяться, - это то, что IDE сможет сказать вам перед компиляцией, действителен ли вызов, который вы пытаетесь сделать. И даже это требует серьезного процесса, подобного компиляции, внутри IDE.

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

1
ответ дан 13 December 2019 в 19:29
поделиться

Попробуйте использовать Visual AssistX, у него есть эта замечательная функция : Щелкните правой кнопкой мыши на своем классе, Refactor (VA X) -> Найти ссылки. Это действительно работает.

1
ответ дан 13 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

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