You’re basically asking for the equivalent of a setPixel function
- unfortunately the syntax you’re describing is not really doable in C/C++ - that notation that you describe up there is only usable for initialization of new objects. e.g. int numbers[3] = { 1, 2, 3}; I can abuse overloading of operators in C++ to let you say ledspx - it’d still be a function but i’ve gotten pretty good at convincing gcc to inline what I want and when i want it 
That said - for the way I do work - always having to assign all three values is frequently wasteful. For example, if I’m calling a 3 value set pixel, that’s 3 sets of stores into memory at 2 clock cycles apiece (assuming, for the moment, that the function fully inlines and gcc isn’t doing anything stupid behind the scenes). But often, what I will do is use memset to rapidly zero out the entire array of leds, then only set the specific colors that I want values set for. If i’m doing something with primarily colors - r, g, o b - that’s 1 assignment/store vs. 3. Relatedly, with HSV, there are times where I’m setting those values separately under differing circumstances. E.g. a loop/function for mapping pixel to hue, then saturation, then brightness.
So, there is a slight bias towards the things i’ve done in projects in the past and need to do in the future.
Also, the explicit callout of foo.r, foo.g, foo.b means that it’s always clear looking at your code what’s red/blue/green. vs. just tossing 3 numbers in - quick: leds[fx](128, 128, 128); - is that HSV or RGB? Even if the ordering was consistent
Long term readability and re-readability of code has a lot of weight with me - but mainly because I spend a lot of time writing some really complex pattern code - the extra typing short term saves me a lot of time re-understanding what the hell i was doing when I go back in 3 months to adapt it to something new.
Note that right now at this point we’re mostly talking about various syntactic sugars for setting values - where explicit assignments for the values r, g, and b, or a setPixel function call, or abusing overloading operators. Under the hood - there are still 3 bytes that need to get written into memory if you are setting all 3 of r, g, and b.
This is part of why, though, I’m pulling the definitions of RGB and HSV classes into the library itself - it’s so we can put functions on the classes directly to address things like this.
(Or, even better, be able to do things like add or subtract two CRGB values and have it know to constrain the values of the resulting ranges to 0-255, and with far far fewer clock cycles than it would take if you were to try to do the add/bounding yourself - arduino’s map function is wasteful! - honestly high performance pixel level manipulations were the first set of functions that Mark and I are throwing together to put into these defs).