The problem is, with Generated (or Object) coordinates, such repeating patterns will always be stretched in one axis. If the texture repeats in the XY plane, the Z axis will be stretched. If the pattern repeats in all 3 axis, it doesn't map onto surfaces the way you want it, at all, because at that point, you'd be trying to sample a volumetric material onto a surface.
I will show how to do it with UV coords, and show why it doesn't work with Generated or Object coordinates.
First, this is the final result: You can use this black and white mask as a factor for any material.
And the node tree:
It looks complicated, but it's rather simple. But explaining all of it would turn this answer to a wall of text, so I suggest Ctrl+Shift+Left Clicking on each of the nodes using the Node Wrangler addon to see how each node contributes to create the final pattern.
There are 3 controls: The number of crosses you want, the size of the crosses, and the thickness of the crosses. Size and thickness values go from 0 - 0.5 by default in the node tree with the value sliders.
And using UV coords, it works on all kind of meshes:
Now, why doesn't it work with Generated coords? To explain, I'll connect the shader to the Volume input instead of the Surface:
As you can see, it's just a bunch of cross shaped pillars. If you were to apply this to a surface, you'd get this:
Stretching on the Z axis. If you were to make the crosses repeat on the Z axis, as well, like so:
And map it onto a surface, you'd get this:
Doesn't really look like crosses, does it? Here's the .blend, regardless: