Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
March 16, 2011 Template string literal? | ||||
---|---|---|---|---|
| ||||
Is it possible to declare string literal of a template type, something like this:
void bar (const(T)[] a) {}
void foo (T) (const(T)[] a)
{
bar("abc"T);
}
foo("def"w);
In this case the string literal passed to "bar" would be of the type "wstring".
Is this somehow possible or do I have to create a variable?
--
/Jacob Carlborg
|
March 16, 2011 Re: Template string literal? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | On Wed, 16 Mar 2011 22:30:17 +0100, Jacob Carlborg <doob@me.com> wrote: > Is it possible to declare string literal of a template type, something like this: > > void bar (const(T)[] a) {} > > void foo (T) (const(T)[] a) > { > bar("abc"T); > } > > foo("def"w); > > In this case the string literal passed to "bar" would be of the type "wstring". > > Is this somehow possible or do I have to create a variable? Not having D available, I would say this should work: void foo( T )( const( T )[] a ) { bar( cast(T)"abc" ); } Otherwise: template stringSuffix( T ) { static if ( is( Unqual!T == char ) ) { enum stringSuffix = "c"; } else static if ( is( Unqual!T == wchar ) ) { enum stringSuffix = "w"; } else static if ( is( Unqual!T == dchar ) ) { enum stringSuffix = "d"; } else { static assert( false ); } } void foo( T )( const( T )[] a ) { bar( mixin( `"abc"` ~ stringSuffix!T ) ); } -- Simen |
March 16, 2011 Re: Template string literal? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | On Thu, 17 Mar 2011 00:30:17 +0300, Jacob Carlborg <doob@me.com> wrote: > Is it possible to declare string literal of a template type, something like this: > > void bar (const(T)[] a) {} > > void foo (T) (const(T)[] a) > { > bar("abc"T); > } > > foo("def"w); > > In this case the string literal passed to "bar" would be of the type "wstring". > > Is this somehow possible or do I have to create a variable? > > void bar (const(T)[] a) {} > > void foo (T) (const(T)[] a) > { bar!(T)("abc"); // same as: const(T)[] abc = "abc"; bar(abc); > } > > foo("def"w); |
March 16, 2011 Re: Template string literal? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Denis Koroskin | On Wed, 16 Mar 2011 22:39:00 +0100, Denis Koroskin <2korden@gmail.com> wrote: > On Thu, 17 Mar 2011 00:30:17 +0300, Jacob Carlborg <doob@me.com> wrote: > >> Is it possible to declare string literal of a template type, something like this: >> >> void bar (const(T)[] a) {} >> >> void foo (T) (const(T)[] a) >> { >> bar("abc"T); >> } >> >> foo("def"w); >> >> In this case the string literal passed to "bar" would be of the type "wstring". >> >> Is this somehow possible or do I have to create a variable? >> > > >> void bar (const(T)[] a) {} >> >> void foo (T) (const(T)[] a) >> { > bar!(T)("abc"); // same as: const(T)[] abc = "abc"; bar(abc); >> } >> >> foo("def"w); I shoulda thought of that. Much cleaner than my solution. -- Simen |
March 17, 2011 Re: Template string literal? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen kjaeraas | On 2011-03-16 22:41, Simen kjaeraas wrote: > On Wed, 16 Mar 2011 22:39:00 +0100, Denis Koroskin <2korden@gmail.com> > wrote: > >> On Thu, 17 Mar 2011 00:30:17 +0300, Jacob Carlborg <doob@me.com> wrote: >> >>> Is it possible to declare string literal of a template type, >>> something like this: >>> >>> void bar (const(T)[] a) {} >>> >>> void foo (T) (const(T)[] a) >>> { >>> bar("abc"T); >>> } >>> >>> foo("def"w); >>> >>> In this case the string literal passed to "bar" would be of the type >>> "wstring". >>> >>> Is this somehow possible or do I have to create a variable? >>> >> >> >>> void bar (const(T)[] a) {} >>> >>> void foo (T) (const(T)[] a) >>> { >> bar!(T)("abc"); // same as: const(T)[] abc = "abc"; bar(abc); >>> } >>> >>> foo("def"w); > > I shoulda thought of that. Much cleaner than my solution. Yeah, me too. Thanks. -- /Jacob Carlborg |
Copyright © 1999-2021 by the D Language Foundation