шаблон D специализация в другом исходном файле

Недавно я задал этот вопрос о том, как моделировать классы типов в D, и предложил способ сделать это с помощью специализации шаблонов.

] Я обнаружил, что D не распознает специализацию шаблона в другом исходном файле. Так что я не мог просто сделать специализацию в файле, не включенном в файл, в котором определена универсальная функция. Чтобы проиллюстрировать это, рассмотрим следующий пример:

//template.d
import std.stdio;
template Generic(A) {
  void sayHello() {
    writefln("Generic");
  }
}

void testTemplate(A)() {
    Generic!A.sayHello();
}


//specialization.d
import std.stdio;
import Template;

template Generic(A:int) {
  void sayHello() {
      writefln("only for ints");
  }
}

void main() {
    testTemplate!int();
}

Этот код печатает «общий», когда я его запускаю. Поэтому я спрашиваю, есть ли какой-нибудь хороший обходной путь, чтобы можно было использовать более специализированную форму из алгоритма.

Обходной путь, который я использовал в вопросе о классах типов, состоял в том, чтобы смешать общие функции после импорта всех файлов с шаблоном специализация, но это несколько некрасиво и ограниченно.

Я слышал, что в c ++ 1x будут шаблоны extern, которые позволят это. Есть ли у D аналогичная функция?

9
задан Community 23 May 2017 в 00:28
поделиться