Я хочу создать несколько гибкое наследование для разных HLSL-шейдеров. К сожалению, мой запланированный маршрут не сработал, и мне интересно, почему. Вот что я делаю:Использовать base struct как аргумент функции в сценарии наследования
У меня есть база-структуры и некоторых структур, которые наследуют от него:
struct baseStruct {};
struct childStruct1 : public baseStruct {
int someInt1;
int someInt2;
}
struct childStruct2 : public baseStruct {
float someFloat1;
bool someBool1;
}
И абстрактный класс с чисто виртуальными функциями, заявленных как это:
class BaseClass {
virtual void Function1(baseStruct& structVal) = 0;
virtual void Function2(baseStruct& structVal) = 0;
}
Это по классу ребенок:
class ChildClass {
void Function1(baseStruct& structVal);
void Function2(baseStruct& structVal);
}
Теперь я хочу, чтобы иметь возможность вызвать либо эти функции с различными структурами, которые имеют baseStruct
как родитель, как это:
childStruct1 cS1;
cS1.someInt1 = 5;
CS1.someInt2 = -3;
Function1(cS1);
Компилятор не жалуется, но когда я пошагово моей программы я заметил, что структура заполняется значениями перед функцией, но, как вскоре, когда я вхожу в свою функцию, структура пуста. Теперь мое первое впечатление будет заключаться в том, что это происходит из-за того, что он получает «casted» до baseStruct
, который пуст. Есть ли способ достичь чего-то подобного, или я делаю что-то неправильно? Возможно, это даже возможно, и я трахался где-то в другом месте, но тогда почему отладчик говорит, что он пуст? Спасибо!
'но как только я вхожу в свою функцию, структура пуста' Как вы это определяете? Вы смотрите на структуру в отладчике? Внутри функции тип параметра - «baseStruct &», который не имеет каких-либо членов, поэтому для отладчика ничего не видно. Как функция планирует использовать значения 'cS1.someInt1' и' cS1.someInt2' (и если она не планирует их использовать, то почему вам все равно, что это такое?) –
Но что, если я хочу использовать те значения, определенные перед функцией внутри? Если baseStruct пуст, есть ли у них доступ к ним? Как мне вернуть его? EDIT: Эти структуры являются фактически постоянными буферами для шейдера и поэтому передаются непосредственно шейдеру. – puelo
Вы отбрасываете его, используя бросок, конечно; например 'Static_cast (structVal)'. Вопрос в том, как вы планируете узнать, к какому типу нужно бросить? –