User loginNavigation |
Relationship between access modifiers and typeI was thinking the other day it'd be interesting if C++ supported something like the following: template<modifier T> class A : public SomeClass { public: void GuarunteedMethod(); void AlwaysThereMethod(); T: void DependsOnUser(); void MayNotBePublic(); }; template<modifier T> class B : T SomeClass { }; Then somewhere in code using the templates: A<public> X; // Object that has public DependsOnUser() A<private> X; // Object that doesn't B<public> X; // publically inherits from SomeClass B<protected> X; // protectedly inherits from SomeClass You can get the same effect in today's C++ as in A by splitting up the class more or in B's case by having dummy intermediary classes. A class has two different types I think, that which it presents to calling code, public interface, and that which it provides to extending code, protected interface (you could argue there's a third, the types that it presents to itself but that's not really an observer relationship). So in the sense that it changes the resulting type, the above C++ extension is consistent with the notion of templates as type factories. This got me thinking about what exactly the relationship between access modifiers and a class's type is. I'm not sure whether or not you could say that access modifiers change the type of member functions. Access modifiers do impose a compile time limit on who can use the function, which sounds related to types, but usually we only think of the type of a function to be it's return type + parameter types. Maybe I'm just caught up in the wording and access modifiers can be thought of as simply defining complex scopes, but it seems different to me from the concept of scope because it's not that the symbols aren't visible, it's that they're disallowed. Thoughts? :) By dataangel at 2006-10-03 06:15 | LtU Forum | previous forum topic | next forum topic | other blogs | 6552 reads
|
Browse archives
Active forum topics |
Recent comments
22 weeks 6 days ago
22 weeks 6 days ago
22 weeks 6 days ago
45 weeks 19 hours ago
49 weeks 2 days ago
50 weeks 6 days ago
50 weeks 6 days ago
1 year 1 week ago
1 year 6 weeks ago
1 year 6 weeks ago