Есть ли все же, чтобы скрыть определение класса C++ для единиц компиляции?Есть ли способ скрыть определение класса C++ в блоке компиляции?
Рассмотрим,
//test1.cpp
struct local
{
local()
{
std::cout<<"test1::local\n";
}
};
void test1()
{
local l;
}
//test2.cpp
struct local
{
local()
{
std::cout<<"test2::local\n";
}
};
void test2()
{
local l;
}
//main.cpp
void test1();
void test2();
int main()
{
test1();
test2();
}
он должен связать & печать, как показано ниже,
test1::local
test2::local
мне нужен механизм, аналогичный как статические функции, я не хочу использовать пространство имен или анонимное пространство имен, потому что до сих пор его символьная информация, экспортируемая в объектный файл.
Конечно: дайте своим классам разные имена. Здесь код нарушает правило определения (ODR), поскольку он определяет ** то же ** имя двумя разными способами. Это приводит к неопределенному поведению. –
Анонимные пространства имен * точно * то, что вам нужно, и информация о символах - это деталь реализации, о которой вам не о чем беспокоиться. – slaphappy