You need to wrap your single filter class into a PolyData container:
struct GriffinBoyFilter
{
void process(float* data, int numSamples);
};
// in the node:
template <int NV> struct node
{
PolyData<GriffinBoyFilter, NV> filters;
};
See:
https://docs.hise.dev/scriptnode/snex_api/containers/polydata.html
This basically creates one filter per voice and automatically selects the one that is assigned to the currently rendered voice.