Является ли auto универсальным и работает с любым API, или я не использую его правильно, я думаю, что в этом случае должно работать, но сработает ошибка, если я изменю ее на конкретный тип, но почему?
// Set vertex buffer
auto stride = m_FullScreenVTFTonemapPass.stride;
auto offset = m_FullScreenVTFTonemapPass.offset;
m_pD3DDevice->IASetInputLayout( m_FullScreenVTFTonemapPass.IALayout );
m_pD3DDevice->IASetVertexBuffers ( 0, 1, &m_FullScreenVTFTonemapPass.VBdata, &stride, &offset );
m_pD3DDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );
в функции IASetVertexBuffers () необходимо указывать шаг и смещение, но появляются ошибки, если я изменю один из них на шаг или смещение с помощью UINT, это работает, но почему не работает auto ?!
Я решил проблему, так как IASetVertexBuffer () нужны два параметра UINT, и мое автоматическое объявление получало два простых целых числа (шаг, смещение), что было ошибкой. IASetVertexBuffer () не может привести от параметров типа int к UINT *. Вот и все.
auto stride = quad->stride;
auto offset = quad->offset;
m_pD3DDevice->IASetInputLayout( quad->IALayout );
m_pD3DDevice->IASetVertexBuffers(0, 1, &quad->VBdata, (UINT*)&stride, (UINT*)&offset);
m_pD3DDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );
Постскриптум В любом случае, если я буду настаивать на использовании auto, тогда я приведу эти значения с шагом (UINT *) и сместим их, и все. Работает без проблем.
Используйте auto только для итераторов и циклов. На мой взгляд, использование авто — плохая привычка.
Если вы зайдете в код через несколько дней или недель, вы будете ненавидеть себя за использование auto для всех возможных переменных. И если есть другой кодер, который должен прочитать ваш код, постарайтесь полностью его избежать.
В вашем особом случае? Что, по-твоему, будет лучше при использовании авто здесь? У UINT и auto есть 4 буквы, поэтому лень не может быть причиной. Если вы посмотрите на свой код и увидите UINT, вы сразу узнаете, к какому типу относится переменная.
авто это не определение типа но класс хранения (лайк статический).
Компилятор жалуется, потому что вы сказали это как и где (в этом случае в стеке), чтобы хранить что-то, но не то, что что-то должно быть.
Вы должны добавить определение типа после авто ключевое слово или как авто по умолчанию в любом случае, замени это с правильным типом.
UNIT stride = ......