Можно ли рассматривать экземпляр шаблона как пространство имен?

StackOverflow https://stackoverflow.com/questions/491994

Вопрос

Предположим, у меня есть

 template< unsigned int num >
 class SomeFunctionality
 {
     static unsigned int DoSomething()
     {
         //...
     }

     static void DoSomethingElse()
     {
     }
 };

 typedef SomeFunctionality<6> SomeFunctionalityFor6;

Семантически «SomeFunctionalityFor6» — это, по сути, пространство имен, специфичное для аргумента шаблона 6.Итак, в коде, использующем этот экземпляр шаблона вместо выполнения

 int main()
 {
       SomeFunctionalityFor6::DoSomething();
 }

Я бы предпочел иметь возможность использовать оператор «using», как в реальном пространстве имен.

 int main()
 {
       using SomeFunctionalityFor6;
       DoSomething();
 }

Это, как я подозреваю, не работает.Visual Studio жалуется, что ей нужно пространство имен, определенное ключевым словом «namespace» после любого оператора using.

Есть ли способ сделать то, что я пытаюсь сделать?В основном я просто не хочу полностью определять пространство имен каждый раз, когда вызываю статические методы.Я знаю, что это всего лишь синтаксический сахар, но, на мой взгляд, он может сделать код намного более читабельным.Мне интересно, есть ли вообще способы шаблонизировать пространство имен напрямую вместо использования ключевого слова «класс».

Это было полезно?

Решение

Вы не можете этого сделать.Ни шаблонизированное пространство имен, ни использование class_name.

Единственные места в коде, где можно использовать статические функции из класса без квалификации, — это производные классы.

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

int main()
{
       typedef SomeFunctionalityFor6 SF6;
       SF6::DoSomething();
}

Другие советы

Или вы можете просто создать локальный объект...

int main()
{
  SomeFunctionalityFor6  SF6;
  SF6.DoSomething();
}

Вы можете заменить/изменить SF6 объект по своему желанию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top