Eu tentei:
#ifdef USE_CPP20_MODULES
#define IMPORT_OR_INCLUDE(module_name, include_filepath) \
import module_name;
#else
#define IMPORT_OR_INCLUDE(module_name, include_filepath) \
#include include_filepath
#endif
Mas nenhum dos compiladores o compilou:
Barulho:
Output of x86-64 clang 19.1.0 (Compiler #1)
<source>:6:2: error: '#' is not followed by a macro parameter
6 | #include include_filepath
| ^
CCG:
<source>:5:56: error: '#' is not followed by a macro parameter
5 | #define IMPORT_OR_INCLUDE(module_name, include_filepath) \
Não entendo por que o pré-processador falha.
Imagino que você não possa usar #include
como definição/substituição de uma macro?
#
tem um significado especial para o pré-processador. É o operador stringize.[cpp.stringize]
:Como não
include
é um parâmetro na macro do tipo função, a substituição falha.Você não pode adicionar um parâmetro tomando
#include
como argumento:[cpp.replace]
:Você pode colocar todos os
import
s para este arquivo em um cabeçalho e todos osinclude
s em um cabeçalho diferente e então#include
o que você quiser de acordo comUSE_CPP20_MODULES
:Ou simplesmente:
Ou simplesmente faça isso diretamente onde você precisa: