On Monday, 13 March 2017 at 19:31:52 UTC, David Zhang wrote:
Basically, I want to define a common interface for a group of
platform-specific classes, except that they should ideally also
share constructor parameters. What I want to do is then alias
them to a common name, selecting the implementation for the
target platform at compile time.
like this?
--------------------------------------
import std.stdio;
abstract class PublicInterface
{
this(int, int) {} // must have body, see below
}
version(broken) {
alias ActualImpl = NotCompile;
}
else {
alias ActualImpl = PlatformSpecificClass;
}
// put behind version too, this just for demonstration
class PlatformSpecificClass : PublicInterface
{
this(int a, int b)
{
super(a,b); // yeah, downside of this approach
writeln(a,b);
}
}
version(broken) {
class NotCompile : PublicInterface
{
// no interface ctor
}
}
void main()
{
new ActualImpl(1,2);
}
-----------------------------------------
there is also way to do this using templates and duck typing, I
think it will be more idiomatic way since ranges and stuff
heavily use it to provide such generalism, though just like you
say, I would prefer to have strict interface for such use case...