Я думаю, что могу дать правильный ответ на этот вопрос. Нет.
То, что вы пытаетесь сделать, это перехватить функциональность template.d (также регистр должен совпадать с файлом и импортировать Template, для некоторых операционных систем это имеет значение). Рассмотрим:
// template.d
...
// spezialisation.d
import std.stdio;
import template;
void main() {
testTemplate!int();
}
Теперь кто-то обновляет код:
// specialization.d
import std.stdio;
import template;
import helper;
void main() {
testTemplate!int();
getUserData();
}
Идеально верно? хорошо внутри помощника:
// helper.d
getUserData() { ... }
template Generic(A:int) {
A placeholder; //...
}
Вы теперь изменили поведение specialization.d только из импорта, и фактически это не удалось бы скомпилировать, так как он не может вызвать sayHello. Эта профилактика имеет свои проблемы. Например, у вас может быть функция, которая принимает Range, но потребитель вашей библиотеки не может передать массив, если ваша библиотека не импортирует std.array, так как именно здесь массив «преобразован» в диапазон.
У меня нет решения для вашей проблемы.
Комментарий Михала предлагает решение второй формы хай-джэкинга, где, скажем, specialization.d пытался хай-джек getUserData
// specialization.d
import std.stdio;
import template;
import helper;
alias helper.getUserData getUserData;
string getUserData(int num) { ... }
void main() {
testTemplate!int();
getUserData();
}