Как создать миксин шаблона DLLAPI () на языке программирования D, который ведет себя подобно хорошо известному макросу DLLAPI (или подобному) в C / C ++? - PullRequest
3 голосов
/ 14 ноября 2011

Как многие из вас знают, в C / C ++ я писал бы макрос, похожий на этот, когда имею дело с динамическими библиотеками.

#ifdef _WIN32
#  define DLLAPI __declspec(dllimport)
#else
#  define DLLAPI
#endif

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

mixin DLLAPI(int, "function1", string, int); // int function1(const char* arg1, int arg2)
mixin DLLAPI(byte, "function2");             // char function2()
// etc

Первый вопрос - это хорошая идея - использовать шаблонный миксин для этого или просто написать код внутри version (Windows) {} version (linux) {} //... блоков? Второй вопрос - как правильно взять все типы после имени функции? :)

1 Ответ

6 голосов
/ 14 ноября 2011

Решение состоит в том, чтобы просто использовать extern (System) вместо extern (C) / extern (Windows) - по умолчанию это stdcall в Windows и cdecl в Linux и whanot.

Таким образом:

extern(System) {
    int function(...) foo;
}
...