Флейм
GameDev.ru / Флейм / Форум / Что даёт такой стиль кода , в чем его плюсы или минусы ?

Что даёт такой стиль кода , в чем его плюсы или минусы ?

Страницы: 1 2 37 8 Следующая »
werasaimonПостоялецwww9 июля 20186:00#0
Что даёт такой стиль кода , в чем его плюсы или минусы ?
template <typename T , std::size_t N> 
class IVector
{
      T m[N];
};


template <typename T>
class IVector<T, 2>
{
   T m[2];
};

template<class T> 
class IVector<T , 3> 
{ 
   T m[3];
}; 

Понятно что можно объявлять переменные единым образом . типа этого :

+ Показать

Но я ни вижу особой разницы если объявлять переменные вот так :

+ Показать


Так в чем же плюс такого стиля программирования ?
Может кто то мне объяснить на фига , это делать на примерах с исходниками ?

Правка: 11 июля 2018 21:39

=A=L=X=Постоялецwww9 июля 20188:04#1
Это не стиль кода, это шаблоны и их частичные специализации.
Например в сердце std::vector<T> сидит T *array = new T[ N ], но для экономии std::vector<bool> пакует биты в byte *array = new byte[ N / 8 ]
gudleifrПостоялецwww9 июля 201810:14#2
Вот специально ничего не писал, чтобы не начался холивар...
Не помогло.
  • **

    werasaimon
    По делу. Если Вас заботит этакая штука (по сути, просто, выбор имен для абстракций), то до программирования еще далеко.

  • EugeneУчастникwww9 июля 201811:45#3
    werasaimon
    > Так в чем же плюс такого стиля программирования ?
    Очень многие математические функции прекрасно обобщаются на векторы произвольной размерности.
    Делать размерность шаблонным параметром — пожалуй, самый аккуратный способ обобщения.
    daveПостоялецwww9 июля 201812:09#4
    template<class T>
    class IVector<T , 3>
    {

    public:
     
        T m[2]
    }

    Прграммист лучше знает, что нужно пользователю.

    kiparУчастникwww9 июля 201813:04#5
    werasaimon
    > Но я ни вижу особой разницы если объявлять переменные вот так :
    Ну и? Что ж ты для третьего пункта не привел аналог? Шаблоны позволяют задать размер в компайл-тайм на уровне типа, а без этого ты в третьей строке сможешь только сделать IVector<std::size_t> c(10000), т.е. тип не будет хранить информацию о размере.
    SuslikМодераторwww9 июля 201813:17#6
    всем расступиться, в треде телепат. если ты это вычитал в чьём-то коде, то это мог бы SoAoS, где векторы пакуются пачками по размеру simd-регистров для потоковых вычислений.
    Panzerschrek[CN]Участникwww9 июля 201815:34#7
    werasaimon
    > T m[2]
    Плохой стиль, с ";" в конце строки лучше.
    Vlad2001_MFSПостоялецwww9 июля 201817:30#8
    Пользуясь возможностью задам свой вопрос: при указании размерности вектора в шаблонном параметре можно как-то сделать доступ к компонентам вектора по именам x, y, z и w? Сам так и не смог ничего придумать, либо просто туплю.

    Правка: 9 июля 2018 17:30

    EugeneУчастникwww9 июля 201817:35#9
    Vlad2001_MFS
    Прямо - никак, кресты сасай.
    Один из простых вариантов — сделать базовый класс, специализированный для 1-2-3-4-N-векторов, с соответствующими полями и геттерами, а от него отнаследовать чисто шаблонный класс без специализаций и в нем уже писать весь функционал.
    Great V.Постоялецwww9 июля 201820:59#10
    Vlad2001_MFS
    Union + обычный массив. Смотри glm, там такое уже есть.
    werasaimonПостоялецwww9 июля 201821:18#11
    Eugene
    > Очень многие математические функции прекрасно обобщаются на векторы
    > произвольной размерности.
    > Делать размерность шаблонным параметром — пожалуй, самый аккуратный способ
    > обобщения.
    >
    Да вот именно! Я так и делаю один шаблоный класс вектор в гильбертовом пространстве , то бишь один обобщёний вектор любой розмерности Vector<float,1D.2D.3D....> ! Только мой вопрос бил совсем об другом , а именно зачем писать код как я написал .


    Suslik
    > всем расступиться, в треде телепат. если ты это вычитал в чьём-то коде, то это
    > мог бы SoAoS, где векторы пакуются пачками по размеру simd-регистров для
    > потоковых вычислений.
    Да ты прав ,на счёт кода ! , твой ответ самий близкий к сути вопроса !
    Но хотелось бы узнать по подробней ?


    gudleifr
    >>По делу. Если Вас заботит этакая штука (по сути, просто, выбор имен для абстракций), то до программирования еще далеко.
    Я прекрасно понимаю что такое шаблоны. Мой вопрос небыл о том что значит этот код . Мой вопрос был зачем писать код так .
    Имееться виду не сами шаблоны, а именно весь код целиком !


    dave
    > Прграммист лучше знает, что нужно пользователю.
    Ну профтыкал, но не в этом же суть вопроса была !

    P.S: люди чё вы придираетись к словам , прекрасно же знаете что я имел виду ! И хватит писать очевидные вещи типа так можно хранить размер , или что это астракция.  Я прекрасно знаю как роботают шаблоны, целую библиотеку на них написал .
    Вопрос не о шаблонах , а коде в целом !?

    Правка: 9 июля 2018 21:54

    werasaimonПостоялецwww9 июля 201821:45#12
    Eugene
    > Прямо - никак, кресты сасай.
    > Один из простых вариантов — сделать базовый класс, специализированный для
    > 1-2-3-4-N-векторов, с соответствующими полями и геттерами, а от него
    > отнаследовать чисто шаблонный класс без специализаций и в нем уже писать весь
    > функционал.
    >
    Не вот такое точно делать не надо , это очень плохой код будет !

    Правка: 9 июля 2018 21:46

    Vlad2001_MFSПостоялецwww9 июля 201822:25#13
    Great V.
    Я про этот вариант думал, но там же нужно будет вручную указывать x, y или x, y, z или вообще x, y, z, w. А ведь хочется чтобы все было автоматически.
    Написал
    typedef Vector<float, 3> Vector3f;
    и оно автоматом добавило туда переменные x, y, z.

    Написал

    typedef Vector<float, 2> Vector2f;
    и оно автоматом добавило туда переменные x, y.

    Или я что-то упускаю?

    Правка: 9 июля 2018 22:25

    DelfigamerПостоялецwww9 июля 201823:34#14
    Vlad2001_MFS
    Достаточно автоматически?

    Правка: 9 июля 2018 23:51

    Страницы: 1 2 37 8 Следующая »

    / Форум / Флейм / Программирование

    2001—2018 © GameDev.ru — Разработка игр