Друзья также полезны для обратных вызовов. Вы могли реализовать обратные вызовы как статические методы
class MyFoo
{
private:
static void callback(void * data, void * clientData);
void localCallback();
...
};
, где callback
вызовы localCallback
внутренне, и эти clientData
имеют Ваш экземпляр в нем. По-моему,
или...
class MyFoo
{
friend void callback(void * data, void * callData);
void localCallback();
}
то, Что это позволяет, для друга, чтобы быть определенным просто в cpp как функция c-стиля и не загромоздить класс.
Точно так же шаблон, который я видел очень часто, должен помещать весь действительно члены парламента, не занимающие официального поста класса в другой класс, который объявляется в заголовке, определенном в cpp и друге. Это позволяет кодеру скрывать большую сложность и внутреннюю работу класса от пользователя заголовка.
В заголовке:
class MyFooPrivate;
class MyFoo
{
friend class MyFooPrivate;
public:
MyFoo();
// Public stuff
private:
MyFooPrivate _private;
// Other private members as needed
};
В cpp,
class MyFooPrivate
{
public:
MyFoo *owner;
// Your complexity here
};
MyFoo::MyFoo()
{
this->_private->owner = this;
}
становится легче скрыть вещи, что нисходящий поток не должен видеть этот путь.
В общем, да, я бы сказал, что это хорошая идея. Catalyst упрощает эту задачу, поскольку вспомогательный сценарий Catalyst.pl устанавливает базовую структуру для вашего веб-приложения, дополненную файлом Makefile.PL и т. Д.
Это означает, что вы упаковываете ваше приложение и развертываете его в сервер - это тривиально просто.
Изменить: я думаю, что исходное сообщение в блоге, о котором вы думали, было Напишите свой код так, как будто он идет на CPAN из Perlbuzz .
"Автор рассматривая код, который мы никогда не собирались выпускать в CPAN, как если бы мы это делали, мы получаем поддержку всей цепочки инструментов CPAN. Эта цепочка инструментов становится лучше с каждым днем ».
публикация вещей в CPAN означает ответственность. вам нужно предоставить хороший документ, дополнительную поддержку и другие. или не переходите на CPAN.
Спасибо
Да, просто потому, что «модуль CPAN» устанавливает только очень либеральные методы. Я предпочитаю Module :: Install, думаю, и большинству здравомыслящих людей тоже. Чтобы запустить базовый дистрибутив с установкой модуля, я просто использую module-starter:
module-starter --mi --module "Foo :: Bar" --author "Evan Carroll" --email " foo@bar.comи добавьте публичный репозиторий в репозиторий Makefile.PL
git: // github ....
и начать кодирование.
Даже если вы не нажимаете на CPAN, module-install
обеспечивает неплохую основу для хорошего модуля.
Другие преимущества: вы можете запустить make dist
, получить tarball и очень легко разместить его на частном http-сервере, а затем просто указать клиенту или серверу установить с помощью cpanp http: // host / path
. Вы также получаете все преимущества Module :: Install
, он будет использовать dmake в Windows и загрузить dmake, если у вас его нет. Это довольно волшебно с кроссплатформенностью.
Здесь нет серьезных недостатков или даже заслуживающих внимания незначительных.
t push to CPAN, module-install
обеспечивает неплохую основу для хорошего модуля.
Другие преимущества: вы можете запустить make dist
, получить архив и разместить его очень легко на частном http-сервере, а затем просто скажите клиенту или серверу установить с помощью cpanp http: // host / path
. Вы также получаете все преимущества Module :: Install
, он будет использовать dmake в Windows и загрузить dmake, если у вас его нет. Это довольно волшебно с кроссплатформенностью.
Здесь нет серьезных недостатков или даже заслуживающих внимания незначительных.
t push to CPAN, module-install
обеспечивает неплохую основу для хорошего модуля.
Другие преимущества: вы можете запустить make dist
, получить архив и разместить его очень легко на частном http-сервере, а затем просто скажите клиенту или серверу установить с помощью cpanp http: // host / path
. Вы также получаете все преимущества Module :: Install
, он будет использовать dmake в Windows и загрузить dmake, если у вас его нет. Это довольно волшебно с кроссплатформенностью.
Здесь нет серьезных недостатков или даже заслуживающих внимания незначительных.
а затем просто скажите клиенту или серверу установить с помощью cpanp http: // host / path
. Вы также получаете все преимущества Module :: Install
, он будет использовать dmake в Windows и загрузить dmake, если у вас его нет. Это довольно волшебно с кроссплатформенностью.
Нет никаких серьезных недостатков или даже заслуживающих внимания незначительных.
а затем просто скажите клиенту или серверу установить с помощью cpanp http: // host / path
. Вы также получаете все преимущества Module :: Install
, он будет использовать dmake в Windows и загрузить dmake, если у вас его нет. Это довольно волшебно с кроссплатформенностью.
Здесь нет серьезных недостатков или даже заслуживающих внимания незначительных.