Thread overview | ||||||
---|---|---|---|---|---|---|
|
October 29, 2014 Template constraint: T is a value type | ||||
---|---|---|---|---|
| ||||
Hi there, I'm looking to write a function template that operates only on value types. Basically I'm looking for an equivalent of where T: struct from C# (http://msdn.microsoft.com/en-us/library/d5x73970.aspx) I was thinking that maybe using template Foo(T) if (is(T : struct) or is(T: union)) { ... } or perhaps template Foo(T) if (!is(T : class)) { ... } would be correct, but I fear the first may be too limiting (would simple data types such as int, char etc be allowed here? I'd guess not.) and the second may be too lax. Any advice? Am I even going in remotely the right direction? Thanks. |
October 29, 2014 Re: Template constraint: T is a value type | ||||
---|---|---|---|---|
| ||||
Posted in reply to Gareth Foster | On 29/10/2014 11:01 p.m., Gareth Foster wrote: > Hi there, > > I'm looking to write a function template that operates only on value > types. Basically I'm looking for an equivalent of > > where T: struct > > from C# (http://msdn.microsoft.com/en-us/library/d5x73970.aspx) > > I was thinking that maybe using > > template Foo(T) if (is(T : struct) or is(T: union)) { ... } > > or perhaps > > template Foo(T) if (!is(T : class)) { ... } > > would be correct, but I fear the first may be too limiting (would simple > data types such as int, char etc be allowed here? I'd guess not.) and > the second may be too lax. > > Any advice? Am I even going in remotely the right direction? Thanks. Code: struct Foo {} union Bar {} class Fuz {} pragma(msg, __traits(isPOD, Foo)); pragma(msg, __traits(isPOD, Bar)); pragma(msg, __traits(isPOD, Fuz)); pragma(msg, __traits(isPOD, int)); pragma(msg, is(Foo == struct)); pragma(msg, is(Bar == struct)); pragma(msg, is(Fuz == struct)); pragma(msg, is(int == struct)); pragma(msg, is(Foo == union)); pragma(msg, is(Bar == union)); pragma(msg, is(Fuz == union)); pragma(msg, is(int == union)); Output: true true true true false false false false true false false Dpaste link: http://dpaste.dzfl.pl/921fa5156290 So to answer your question, first was pretty much correct. |
October 29, 2014 Re: Template constraint: T is a value type | ||||
---|---|---|---|---|
| ||||
Posted in reply to Gareth Foster | On Wednesday, 29 October 2014 at 10:01:18 UTC, Gareth Foster wrote:
> Hi there,
>
> I'm looking to write a function template that operates only on value types. Basically I'm looking for an equivalent of
>
> where T: struct
>
> from C# (http://msdn.microsoft.com/en-us/library/d5x73970.aspx)
>
> I was thinking that maybe using
>
> template Foo(T) if (is(T : struct) or is(T: union)) { ... }
>
> or perhaps
>
> template Foo(T) if (!is(T : class)) { ... }
>
> would be correct, but I fear the first may be too limiting (would simple data types such as int, char etc be allowed here? I'd guess not.) and the second may be too lax.
>
> Any advice? Am I even going in remotely the right direction? Thanks.
std.traits.hasIndirections any use for you?
|
October 31, 2014 Re: Template constraint: T is a value type | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | On Wednesday, 29 October 2014 at 11:49:59 UTC, John Colvin wrote: > On Wednesday, 29 October 2014 at 10:01:18 UTC, Gareth Foster wrote: >> Hi there, >> >> I'm looking to write a function template that operates only on value types. Basically I'm looking for an equivalent of >> >> where T: struct >> >> from C# (http://msdn.microsoft.com/en-us/library/d5x73970.aspx) >> >> I was thinking that maybe using >> >> template Foo(T) if (is(T : struct) or is(T: union)) { ... } >> >> or perhaps >> >> template Foo(T) if (!is(T : class)) { ... } >> >> would be correct, but I fear the first may be too limiting (would simple data types such as int, char etc be allowed here? I'd guess not.) and the second may be too lax. >> >> Any advice? Am I even going in remotely the right direction? Thanks. > > std.traits.hasIndirections any use for you? To more complete this: template Foo(T) if(!hasIndirections!T) http://dlang.org/phobos/std_traits.html#hasIndirections |
Copyright © 1999-2021 by the D Language Foundation