Когда у нас есть какое-либо практическое применение для иерархических пространств имен в C++?

Так как вам нужно сохранить первую ось из выровненных W и C, оставив позади последнюю ось с матричным умножением, я бы предложил использовать np.einsum для очень эффективного подхода, например:

np.einsum('ijk,ik->ij',W,C)

np.tensordot или np.dot не имеет функции для выравнивания осей, и именно здесь np.einsum улучшается.

5
задан Flinkman 22 September 2008 в 19:50
поделиться

9 ответов

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

Существует также другое использование сегрегации пространства имен. Одна популярная ситуация помещает базовые классы для шаблона "фабрика" в его собственном пространстве имен и затем получила фабрики в их собственных пространствах имен поставщиком. Например. System.Data, System.Data.SqlClient и System.Data.OleDbClient.

9
ответ дан 18 December 2019 в 13:21
поделиться

Очевидно, это - дело вкуса. Но это действительно сводится к организации. Например, у меня есть проект, который имеет сменный API, который имеет функции/объекты, которые выглядят примерно так:

plugins::v1::function

Когда 2.0 будет реализован, они будут помещены в v2 подпространство имен. Я планирую только удержать от использования, но никогда не удалить v1 участников, которые должны приятно поддерживать назад совместимость в будущем. Это - всего один пример "нормального" использования. Я предполагаю, что некоторые люди будут отличаться, но как я сказал, это - дело вкуса.

2
ответ дан 18 December 2019 в 13:21
поделиться

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

Если Вы рассматриваете то, что на любом уровне иерархии, люди могут только постигать где-нибудь очень примерно на порядке 10 пунктов, то два уровня только дают Вам 100 максимумов. Достаточно большой проект испытывает необходимость в больше, так может легко закончиться 3 уровня глубоко.

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

Я работаю над XXX приложениями в своей компании yyy, и я пишу подсистему GUI. Таким образом, я использую yyy:: xxx:: gui как мое пространство имен.

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

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

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

Это зависит от Ваших потребностей и стиля программирования. Но одно из преимуществ namespace должен помочь пространству имени раздела (отсюда имя). С единым пространством имен, в то время как Ваш проект является увеличениями размера и сложности, также - вероятность коллизии имени.

Если Вы - написание кода, это предназначено, чтобы быть совместно использованным или снова использованным, это становится еще более важным.

0
ответ дан 18 December 2019 в 13:21
поделиться

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

0
ответ дан 18 December 2019 в 13:21
поделиться

Я соглашаюсь для приложений. Большинство людей, которые используют несколько уровней пространств имен (по моему опыту), происходит из Java или фона.NET, где шум значительно меньше. Я нахожу, что хорошие префиксы класса могут занять место нескольких уровней пространств имен.

Но я видел хорошее использование нескольких уровней пространства имен в повышении (и другие библиотеки). Все находится в пространстве имен повышения, но библиотекам разрешают (поощренный?), чтобы быть в их собственном пространстве имен. Например - повышение:: пространство имен this_thread. Это позволяет вещи как...

boost::this_thread::get_id()
boost::this_thread::interruption_requested()

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

0
ответ дан 18 December 2019 в 13:21
поделиться

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

Например, мы в настоящее время используем 2 иерархии уровня. Однако некоторые большие части мы теперь говорим о выламывании их на 3 уровня.

0
ответ дан 18 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

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