On Friday, 6 December 2019 at 13:04:57 UTC, Ferhat Kurtulmuş wrote:
On Friday, 6 December 2019 at 12:34:17 UTC, realhet wrote:
Hi,

I'm trying to use a popular function name "max", and extend it for my special types:

For example:

module utils;
MyType max(in MyType a, in MyType a){...}  //static function

struct V3f{
  V3f max(in V2f b){...} //member function
}

module gl3n;
vec3 max(in vec3 a, in vec3 a) //another static function in different module

I also want to use std.algorithm.comparison.max as well.


I know that the ambiguity error can be avoided by public importing all the various max implementations into one place, but how to do this when I want to use 3 modules? Need a 4th module to combine them all? Is there a nicer way? Another question that is it possible to extend the the template function "to" in more than one module and use it easily from my main project modules?

how about this:

import std.stdio;
import std.algorithm.comparison: max1 = max;

int max(int a, int b){ // dummy max
    return 5;
}


void main(){
    int a = 2;
    int b = 3;

    max1(a, b).writeln; // writes 3

}

Thx for answering!

This is what I want to avoid: To use extra identifiers or imports for the same semantic task.

------------------------
module m1;
public import std.algorithm.comparison: max;
struct MyType{ int x;}
MyType max(in MyType a, in MyType a){ return a.x>b.x ? a : b; }


module main;
import m1;

------------------------
From here: the max() is working for MyType and also for the types supported by std.algo.comparison.max.

BUT! What if I want to import another module which is overloading max?! It will be an ambiguity between m1 and the other module. I'm searching for a clever solution, not just manually reimporting everything in every module where I use multiple modules which also manually reimporting those simple names like 'max'.

Reply via email to