auto attribute for interface functions
Roman
shamyan.roman at gmail.com
Wed Oct 9 07:13:48 PDT 2013
> In fact, since the template could be in a library, and code
> could use that library well after the library has been
> written...
> As such, there is a fundamental conflict between how templates
> work and how virtual functions work. They just don't mix.
Seems, the same problem doesn't allow auto attribute to virtual
functions, because technically ,I think, possible get type from
implemented functions, and if code trying to use return type not
appropriate manner then throw runtime exception.
Like this:
```
interface I
{
auto foo(int i);
}
class A:I
{
string foo(int i)
{
return to!string(i);
}
}
void fun(I instance)
{
auto a = instance.foo(1);
// or even
// string a = instance.foo(1);
writeln(a[0..$/2]);
writeln(a*5); //here will thrown exception
}
```
> What you can do is make final templates which aren't ever
> inherited but can forward to functions which can be inherited
That looks intresting, but little different from using virtual
functions. I think it is mix interfaces and abstract classes.
More information about the Digitalmars-d-learn
mailing list