Q about template for matching arrays
Bill Baxter
dnewsgroup at billbaxter.com
Thu Feb 1 06:25:56 PST 2007
Kirk McDonald wrote:
> Bill Baxter wrote:
>> I'd like to write a template function something like:
>>
>> T foo(T,S)(S x)
>>
>> that takes arrays of various kinds and returns an element of the base
>> type (well really something derived from the base type, but that
>> part's easy).
>>
>> The trick is that what I'd really like is for it be able to be used in
>> all of the following ways:
>>
>> // IFTI
>> foo(3) // T=int S=int
>> foo([3]) // T=int S=int[]
>> foo([[3]]) // T=int S=int[][]
>> foo([[[3]]]) // T=int S=int[][][]
>> ... etc
>>
>> // Base type explicit
>> foo!(float)(3) // T=float S=float
>> foo!(float)([3]) // T=float S=float[]
>> foo!(float)([[3]]) // T=float S=float[][]
>> ... etc
>>
>> It's easy if you say you have to call it like foo!(float[][])([[3]]),
>> but that's annoying.
>>
>> Any bright ideas?
>>
>> --bb
>
> This only works for dynamic arrays, but:
>
> typeof(T.init[0]) foo(T)(T x) {}
>
Just getting the base type of the array is not what I'm after.
The ultimate goal is to write something that's as close as possible to
NumPy's 'asarray' function, a function which takes a wide range of input
types and returns an n-dimensional "Array!(Type)" object built from that
data.
The trick is that in some cases I might like to coerce the data type. Like
asarray!(cfloat)([[1,2],[3,4]])
but with the above asarray(T)(T x) declaration that gives an error like
"int[][] is not a cfloat".
I suspect I may just have to settle for two versions like asarray(T)(T
x) and
template asarray_of_type(AT) { asarray_of_type(T)(T x) {} }
Yeh, that doesn't seem so bad actually.
--bb
More information about the Digitalmars-d-learn
mailing list