| |
| Posted by Ferhat Kurtulmuş in reply to Steven Schveighoffer | PermalinkReply |
|
Ferhat Kurtulmuş
| On Tuesday, 17 August 2021 at 13:14:44 UTC, Steven Schveighoffer wrote:
> On 8/17/21 8:21 AM, Ferhat Kurtulmuş wrote:
> Hello folks,
Hope everyone is doing fine. Considering the following code, in the first condition, I am extracting the type Point from the slice Point[]. I searched in the std.traits, and could not find a neater solution something like ElementTypeOf!T. Is there any neater solution for it? Thanks in advance.
static if (isArray!VecPoint){
VecPoint dummy;
alias Point = typeof(dummy[0]);
} else static if (isRandomAccessRange!VecPoint){
alias ASeq2 = TemplateArgsOf!VecPoint;
alias Point = ASeq2[0];
} else
static assert(0, typeof(VecPoint).stringof ~ " type is not supported");
If you want the element type of a range (i.e. the thing returned by range.front ), you can use ElementType!T (from std.range.primitives).
This returns the element type of the range, which for every array except character arrays, gives you the element type of the array.
If you want always the element type of the array, even for auto-decoded ranges, use ElementEncodingType!T .
If you know it's an array, you can just use Paul's solution.
Your isRandomAccessRange branch seems very suspect.
-Steve
Very informative, thanks. My code is lying here1. I want my struct to accept 2d static arrays, random access ranges, and "std.container.Array". I could achieve it with its present form, and I will probably slightly modify it based on your comments.
|