[cfe-dev] automatic constructors a la GLSL?

John McCall rjmccall at apple.com
Thu Sep 9 10:47:19 PDT 2010


On Sep 9, 2010, at 4:23 AM, Dominic Laflamme wrote:
> I am porting a bunch of GLSL code over to LLVM and am wondering how I can setup constructors for a certain type. 
> 
> example:
> 
> <snip>
> typedef float float4 __attribute__((ext_vector_type(4)));
> 
> float4 float4(float r, float g, float b, float a )
> {
> float4 ret = {r,g,b,a};
> return ret;
> }
> 
> float4 float4(float r, float g, float b )
> {
> float4 ret = {r,g,b,1.0};
> return ret;
> }
> </snip>
> 
> Of course this wont work since the function are using the same name, but any idea how I can setup these types of constructors? Should I declare float4 as a struct and overload the constructors? Can the ext_vector_type extension provide some help?

In C++, you could certainly just make float4 a class that wraps a vector and has an implicit conversion to vector type.  Alternatively, if you're willing to use different function names, you can just make these overloaded functions.  Otherwise I don't think there's a reasonable solution short of inventing a crazy new language feature.

It's not unreasonable for us to support direct-initialization of vector types a la 'float4(a,b,c,d)' as a generic form of vector initialization in C++, but obviously that wouldn't extend to the three-argument version.

John.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20100909/4ba23b62/attachment.html>


More information about the cfe-dev mailing list