Сообщение Re[7]: Вопрос знатокам от 04.04.2023 22:11
Изменено 04.04.2023 22:35 rg45
Re[7]: Вопрос знатокам
Здравствуйте, kov_serg, Вы писали:
R>>Чтоб портянки не писать проектировать нужно нормально, по максимуму используя ADL. По-моему, только ленивый еще не писал "не специализируйте шаблоны функций".
_>Без примера не понятно.
http://coliru.stacked-crooked.com/a/4b8d981c3e71c47b
Сразу оговорюсь, что для встроенных типов ADL таким образом не работает. Но я сильно сомневаюсь, что упомянутые выше "портянки" появляются исключительно от использования встроенных типов.
R>>Чтоб портянки не писать проектировать нужно нормально, по максимуму используя ADL. По-моему, только ленивый еще не писал "не специализируйте шаблоны функций".
_>Без примера не понятно.
http://coliru.stacked-crooked.com/a/4b8d981c3e71c47b
#include <iostream>
#include <string>
template <typename T>
void fi(T&& t)
{
f(t); // вообще никакого предварительного объявления не требуется
}
namespace test
{
// тип может располагаться даже в произвольном пространстве имен
struct A
{
std::string name;
};
void f(const A& a)
{
std::cout << "A: " << a.name << std::endl;
}
} // namespace test
int main()
{
fi(test::A{"RSDN"});
}
Сразу оговорюсь, что для встроенных типов ADL таким образом не работает. Но я сильно сомневаюсь, что упомянутые выше "портянки" появляются исключительно от использования встроенных типов.
Re[7]: Вопрос знатокам
Здравствуйте, kov_serg, Вы писали:
R>>Чтоб портянки не писать проектировать нужно нормально, по максимуму используя ADL. По-моему, только ленивый еще не писал "не специализируйте шаблоны функций".
_>Без примера не понятно.
http://coliru.stacked-crooked.com/a/4b8d981c3e71c47b
Сразу оговорюсь, что для встроенных типов ADL таким образом не работает. Но я сильно сомневаюсь, что упомянутые выше "портянки" появляются исключительно от использования встроенных типов.
R>>Чтоб портянки не писать проектировать нужно нормально, по максимуму используя ADL. По-моему, только ленивый еще не писал "не специализируйте шаблоны функций".
_>Без примера не понятно.
http://coliru.stacked-crooked.com/a/4b8d981c3e71c47b
#include <iostream>
#include <string>
template <typename T>
void fi(T&& t)
{
f(t); // вообще никакого предварительного объявления не требуется
}
namespace test
{
// А типы вместе с их функциями могут располагаться в разных пространствах имен
struct A
{
std::string name;
};
void f(const A& a)
{
std::cout << "A: " << a.name << std::endl;
}
} // namespace test
int main()
{
fi(test::A{"RSDN"});
}
Сразу оговорюсь, что для встроенных типов ADL таким образом не работает. Но я сильно сомневаюсь, что упомянутые выше "портянки" появляются исключительно от использования встроенных типов.