Создайте экземпляры разных классов в соответствии с разными флагами компиляции одного и того же файла заголовка в С++.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Создайте экземпляры разных классов в соответствии с разными флагами компиляции одного и того же файла заголовка в С++.

Сообщение Anonymous »

У меня есть класс, который варьируется в зависимости от флага компиляции.
Я хотел бы создать экземпляры обеих версий класса в одной области действия.

Код: Выделить всё

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_not_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
Я использую bazel в качестве системы сборки, поэтому скомпилировал их с COMP_FLAG и без него, чтобы создать две отдельные цели.

Код: Выделить всё

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
error: 'MyClassFlagged' was not declared in this scope.

Подробнее здесь: https://stackoverflow.com/questions/786 ... of-same-he
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Custom Pyside2 QabstractTableModel с разными флагами для разных QTableView
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Custom Pyside2 QabstractTableModel с разными флагами для разных QTableView
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Коды С++ ведут себя по-разному с разными флагами оптимизации
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский pyside2 QabstracttableModel с разными флагами для различных QtableView [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Создайте файл cookie с флагами secure и httponly для отображения баннера.
    Anonymous » » в форуме Php
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»