Я хотел бы создать экземпляры обеих версий класса в одной области действия.
Код: Выделить всё
my_class.h
#ifndef MY_CLASS_H
#define MY_CLASS_H
#ifdef COMP_FLAG
#define MY_CLASS MyClassFlagged
#else
#define MY_CLASS MyClassNotFlagged
#endif
class MY_CLASS
{
};
#endif
Код: Выделить всё
my_class_flagged.h
Код: Выделить всё
my_class_flagged.h
#ifndef MY_CLASS_FLAGGED
#define MY_CLASS_FLAGGED
#include "my_class.h"
#endif
Код: Выделить всё
my_class_not_flagged.h
#ifndef MY_CLASS_NOT_FLAGGED
#define MY_CLASS_NOT_FLAGGED
#include "my_class.h"
#endif
Код: Выделить всё
BUILD
cc_library(
name = "not_flagged",
hdrs = ["my_class.h"],
)
cc_library(
name = "flagged",
hdrs = ["my_class.h"],
defines = ["COMP_FLAG"],
)
cc_library(
name = "my_class_flagged",
hdrs = ["my_class_flagged.h"],
deps = [":flagged"],
)
cc_library(
name = "my_class_not_flagged",
hdrs = ["my_class_not_flagged.h"],
deps = [":not_flagged"],
)
Код: Выделить всё
#include "my_class_flagged.h"
#include "my_class_not_flagged.h"
// NOT BUILD
TEST(MyClassNotFlaggedTest, NotFlaggedInstantiation)
{
MyClassNotFlagged my_class_not_flagged;
std::ignore = my_class_not_flagged;
}
// PASS
TEST(MyClassFlaggedTest, FlaggedInstantiation)
{
MyClassFlagged my_class_flagged;
std::ignore = my_class_flagged;
}
Код: Выделить всё
error: 'MyClassNotFlagged' was not declared in this scope; did you mean 'MyClassFlagged'?
Код: Выделить всё
cc_test(
name = "test",
srcs = ["test.cpp"],
deps = [
":my_class_flagged",
":my_class_not_flagged",
],
)
[463035818_is_not_an_ai] Проблема с защитой включения
Я пытался изменить my_class.h файл:
Код: Выделить всё
#ifdef COMP_FLAG
#ifndef MY_CLASS_FLAGGED_H
#define MY_CLASS_FLAGGED_H
#define MY_CLASS MyClassFlagged
class MY_CLASS
{
};
#endif // MY_CLASS_FLAGGED_H
#else
#ifndef MY_CLASS_NOT_FLAGGED_H
#define MY_CLASS_NOT_FLAGGED_H
#define MY_CLASS MyClassNotFlagged
class MY_CLASS
{
};
#endif // MY_CLASS_NOT_FLAGGED_H
#endif
Код: Выделить всё
error: 'MyClassNotFlagged' was not declared in this scope
Подробнее здесь: https://stackoverflow.com/questions/786 ... of-same-he