Прямо сейчас у меня есть что-то вроде этого:
extern ... {
void foo(int i);
};
Мне нужно что-то более похожее на:
extern ... {
void foo(auto ...bar);
};
Но это не разрешено языком, поскольку C ++ отрицает auto
в объявлениях функций.
Если я не ошибаюсь, <template>
создаст совершенно новую функцию за вызов, в зависимости от аргументов, с которыми она была вызвана, исправьте меня, если я ошибаюсь.
Ограничения : я не могу никоим образом определять здесь функцию, поскольку у меня абсолютно нет контроля над функцией, без заголовка, ничего.
Если бы я мог, я бы использовал лямбду или шаблон.
Если вы думаете, что это проблема XY, которая все еще может быть, я делаю это во время компиляции C ++ в WebAssembly.
Если вы хотите знать, код фактический выглядит следующим образом:
#define WASM_EXPORT __attribute__((visibility("default"))) \
extern "C"
#define WASM_IMPORT extern “C”
WASM_EXPORT const void log(int output);
Ключевой момент: фактические внешние функции не доступно во время компиляции.
Поскольку фактический код, который я использую, не мой, я дам pr благодарность действительному автору: https://medium.com/@dougschaefer / идет прямо-в-clang-for-webassembly-928df1484430
Их краткое руководство по WebAssembly с использованием C ++ - это то, что я использую. Их реализация сгенерированного выходного файла также там, если вам нужна дополнительная информация.
Для тех из вас, кто не знает, JavaScript функция *1045* очень похожа на C int printf(char*, ...)
, у него даже есть строка формата.