С Clang ++ есть ли способ включить файл в качестве пространства имен, и т. Д. c.? - PullRequest
1 голос
/ 12 февраля 2020

Есть ли способ для пространства имен (или иным образом) включить файл, не изменяя файл для включения?

Как в чем-то вроде:

#include "A.cpp" as namespace A

При чем, например, :

Старт. cpp

// #include "A.cpp" as namespace A
#include "B.cpp"

int main() {
    // Could call A::Function() 
    // or similar??
}

A. cpp

int Function() {
    return 1;
}

B. cpp

int Function() {
    return 2;
}

Сборник:

clang++ --std=c++2a Start.cpp -o Start.o; ./Start.o

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

В C ++ такой функции нет. Лучшее, что вы можете сделать, это:

namespace A {
#include "A.cpp"
}

#include просто вставляет файл, так что это может привести к некоторым ошибкам.

Хорошие библиотеки C ++ определяют свои собственные пространства имен.

Надеюсь, модули в C++20 упростят это!

1 голос
/ 12 февраля 2020

Вы можете заключить включение в пространство имен.

namespace A {
#include "A.cpp"
}

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

Примечание. Не следует включать файл cpp. Это не хорошо.

...