Как уже упоминалось, это именно то, как работает язык.
Другим решением является использование наследования и переход к родительскому методу:
class Derived : public Base
{
protected:
int d;
public:
void DoSomething(const Base& that)
{
Base::DoSomething(that);
d=0;
}
};
Репозиторий asdf поставляется с расширением asdf / contrib / wild-modules.lisp, которое делает то, что вы говорите. Я бы все равно использовал вместо этого систему с указанием пакетов.
Вы можете использовать расширение ASDF «система определения пакетов»: https://common-lisp.net/project/asdf/asdf/The-package_002dinferred_002dsystem-extension.html#The-package_002dinferred_002dsystem-extension [110 ]. Для этого вам придется придерживаться соглашения об именах каталогов и файлов, но оно (внешне) немного ближе к тому, как такие вещи организованы на других языках.
Я должен признать, что предпочитаю явное расположение в файле asd, потому что оно четко разделяет понятия систем, пакетов и файлов.