Перенести/скопировать функцию/шаблон функции в другое NS
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 06.09.19 17:12
Оценка: -1
Здравствуйте!

Можно ли малой кровью перенести функцию (все её перегрузки), или шаблон функции (аналогично) из пространства имен, в котором они были объявлены, в другое пространство имен?

Суть такая, что я пока то да сё, делал всё в некотором приватном NS, тестировал и отлаживал сущности прямо оттуда. Когда заработало, нужные сущности захотел перенести в публичное NS, но тут закавыка, что и сущностей, которые следует опубликовать — много, но также и много и приватного, зависящего от системы/платформы/etc, которое хотелось бы спрятать. Пока было не совсем понятно, каким получится публичный интерфейс библиотеки, принял решение колбасить всё в приват. С типами — всё просто, а вот с функциями — не понял, как быть


ЗЫ C++ 11. Но если такое появилось только в более поздних, тоже интересно узнать

ЗЫЫ У кого-то уже спрашивал, но вроде у коллег на работе. Хотя мог и тут. Тогда сорян — наверно был пьян и не помню
Маньяк Робокряк колесит по городу
Re: Перенести/скопировать функцию/шаблон функции в другое NS
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 06.09.19 17:19
Оценка:
Здравствуйте, Marty, Вы писали:

Обычно в профильных форумах принято мотивировать минусы, но тебе простительно
Маньяк Робокряк колесит по городу
Re: Перенести/скопировать функцию/шаблон функции в другое NS
От: ononim  
Дата: 06.09.19 18:48
Оценка:
Оно?
namespace Foo
{
    void Function()
    {
        printf("hello world\n");
    }
}

namespace Bar
{
    using Foo::Function;
}

int main()
{
    Bar::Function();
    return 0;
}
Как много веселых ребят, и все делают велосипед...
Re[2]: Перенести/скопировать функцию/шаблон функции в другое NS
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 06.09.19 19:07
Оценка:
Здравствуйте, ononim, Вы писали:

O>Оно?


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

Часть проблем касается enum'ов — http://ideone.com/ddSG5J
Согласен, это уже не совсем то, о чем я спрашивал, но проблема растет из того же места

Что-то еще было, надо уточнить/повспоминать
Маньяк Робокряк колесит по городу
Re[3]: Перенести/скопировать функцию/шаблон функции в другое NS
От: kov_serg Россия  
Дата: 06.09.19 20:42
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, ononim, Вы писали:


O>>Оно?


M>Вроде. Проверил — работает. Наверно, есть еще нюансы, о которых я позабыл (вопрос не первой свежести, был пока отложен, а тут решил подразобраться без материалов по нему под рукой).


M>Часть проблем касается enum'ов — http://ideone.com/ddSG5J

M>Согласен, это уже не совсем то, о чем я спрашивал, но проблема растет из того же места
...
using ns1::e1;
using ns1::e2;
...


M>Что-то еще было, надо уточнить/повспоминать

namespace ns2=ns1;

Так не работает?
Re[4]: Перенести/скопировать функцию/шаблон функции в другое NS
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 06.09.19 20:48
Оценка:
Здравствуйте, kov_serg, Вы писали:


M>>Часть проблем касается enum'ов — http://ideone.com/ddSG5J

M>>Согласен, это уже не совсем то, о чем я спрашивал, но проблема растет из того же места
_>
_>...
_>using ns1::e1;
_>using ns1::e2;
_>...
_>



Тут проблема в том, что надо все enum'ы почленно перетягивать. Это унылое занятие.


M>>Что-то еще было, надо уточнить/повспоминать

_>
_>namespace ns2=ns1;
_>

_>Так не работает?

Я вроде писал о том, что приватные части не хотелось бы перетягивать
Маньяк Робокряк колесит по городу
Re[5]: Перенести/скопировать функцию/шаблон функции в другое
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 07.09.19 05:45
Оценка:
Здравствуйте, Marty, Вы писали:

M>Я вроде писал о том, что приватные части не хотелось бы перетягивать


Я сейчас как раз такой же ..... фигней занимаюсь

Оставил одно пространство имен для private и public кода.

Но развалил код по разным директориям с незамысловатыми названиями private и public.

---
Правда есть вариант и с разными namespaces. В этом случае внутри private_nms делаю "using namespace public_nms".

---
В общем базовый смысл — вынести public код/интерфейс не сколько в отдельный nms, сколько в отдельные файлы
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Отредактировано 07.09.2019 5:46 DDDX . Предыдущая версия .
Re[5]: Перенести/скопировать функцию/шаблон функции в другое NS
От: kov_serg Россия  
Дата: 07.09.19 06:47
Оценка:
Здравствуйте, Marty, Вы писали:


M>Тут проблема в том, что надо все enum'ы почленно перетягивать. Это унылое занятие.

засунь enum-ы в классы
struct A {
  enum E { e1,e2 };
};

или так-то так сделай
namespace ns1 {
  namespace Enums {
    enum E { e1,e2 };
    enum EE { ee1, ee2 };
  }
  using namespace Enums;
}

namespace ns2 {
  using namespace ns1::Enums;
};

если не все надо то можно еще например так
namespace ns1 {
  namespace Public {
    ...
  } using namespace Public;
}
...
namespace ns2=ns1::Public;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.