Различные определения для одних и тех же классов при обработке нескольких целей

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

По сути, суть проблемы одинакова для обоих, мне нужно иметь одинаковую подпись, но с разными определениями.

Каков наилучший способ организовать мой код в файловой системе и для компиляции и производства, чтобы я мог сохранить это в чистоте и отделить?

Благодарю.

2

Решение

Я предлагаю вам вмешаться на исходном уровне, а не в заголовочных файлах (просто чтобы сохранить те же интерфейсы), что-то вроде:

//Foo.h

class Foo{
void methodA();
void methodB();
};//Foo.cpp

// common method
Foo::methodA() { }

#ifdef _DEBUG_
Foo::methodB() { }
#elif _PLATFORM_BAR_
Foo::methodB() { }
#else
Foo:methodB() { }
#endif

Если вместо этого вы хотите, чтобы все было разделено, вам придется работать на более высоком рычаге, препроцессора недостаточно для условного включения файла .cpp вместо другого. Вам придется работать с Makefile или что вы используете.

Другим вариантом может быть выбор исходных файлов, которые просто исчезают, когда не на конкретной платформе, например:

//Foo.h

class Foo{
void methodA();
void methodB();
};

//FooCommon.cpp

void Foo::methodA() { }

//FooDebug.cpp
#ifdef _DEBUG_H
void Foo::methodB() { }
#endif

//FooRelease.cpp
#ifndef _DEBUG_H_
void Foo::methodB() { }
#endif
1

Другие решения

// #define DEBUG   -  we're making a non debug version#ifdef DEBUG

// function definition for debug

#else

// function definition for release

#endif

То же самое можно сделать для разных операционных систем. Конечно, существует проблема перекомпиляции всего этого, что может быть проблемой в C ++.

2

Если ваш компилятор позволяет, вы можете попытаться сохранить исходные файлы для каждой версии в отдельной подпапке (например, #include "x86_d/test.h") затем с помощью глобальных макроопределений для управления потоком:

#define MODE_DEBUG

#ifdef MODE_DEBUG
#include "x86dbg/test.h"#else
#include "x86rel/test.h"#endif

Вы также можете использовать аналогичную структуру для определений функций-членов, так что вы можете иметь два разных определения в одном файле. Многие компиляторы также используют свои собственные определения для глобальных макросов, поэтому вместо #define MODE_DEBUG выше, вы можете использовать что-то вроде #ifdef _CPP_RELEASE или, может быть, даже определить один через флаг компилятора.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector