On Fri, 30 May 2014 16:09:59 -0400, Philippe Sigaud <philippe.sig...@gmail.com> wrote:

On Friday, 30 May 2014 at 20:02:40 UTC, Steven Schveighoffer wrote:

If you want an opaque struct, you need to return it by pointer.

What do you mean? Like this?

Hidden* foo() { return new Hidden();}

?

Yes, this way you can control all aspects of the construction and use. You wouldn't need to make it private even, just don't lay out the struct in the normal import:

struct Hidden;

I think you would need to use a .di file to do this.


Otherwise, the user must be able to know what type it is (otherwise, how would he use it?)

I just fear that by using internal, public, functions, the user might get access to a private type. I guess the D answer to that is to make foo private also. That makes sense.

You can make the struct's methods and data all private, which would prevent any useful access to it. But I don't know your use case.

I now realize that I implicitly considered 'private' to be transitive (or viral). That is that:

Hidden foo() { return Hidden();}

as foo is returning a value from a private type, it should be considered private also. By the compiler, I mean.

No, private just makes the symbol not directly accessible. Since foo is not private, it's accessible.

-Steve

Reply via email to