Re: Платформенно-зависимый код и С++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 14.09.02 22:32
Оценка:
Здравствуйте orangy, Вы писали:

[skip]

O>У нас возникла идея альтернативного подхода к этому вопросу, а именно использование traits. Сущность идеи, конечно, не нова, но я ни разу не видел использования этого в наличествующих библиотеках именно для работы с платформами.


O>Итак, немного [псевдо]кода:

O>
O>typedef enum
O>{
O>    win32, win32_ce, linux, /* другие платформы */
O>#if defined(_WIN32)
O>    #define PLATFORM_WIN32
O>    platform = win32
O>#elif defined(_WIN32_WCE)
O>    #define PLATFORM_WIN32_CE
O>    platform = win32_ce
O>#elif /* другие платформы */
O>#else
O>    #error defaults not correct; you must hand modify platform_def.h
O>#endif
O>} platform_type;
O>



ИМХО, ты на верном пути. Только мне кажется, что лучше идентификаторы платформ поместить не в enum, а сделать их в виде Dummy-классов.

Попробуй сделать так:


class PlatformWin32; // Всё. У этого класса никакого тела не будет.
class PlatformLinux; // У этого - тоже.

#ifdef PLATFORM_WIN32
typedef PlatformWin32 CurrentPlatform;
#else
...
#endif

// Определения шаблонов платформозависимых классов:

template<typename PLATFORM, typename Tr = type_trait<PLATFORM> >
class mutex_trait { ... };

// Специализация

template<>
class mutex_trait<PlatformLinux> { ... };

template<>
class mutex<PlatformLinux> { ... }

// Использование в платформонезависимом коде:

mutex<CurrentPlatform> some_mutex;

// И т.д.


Специализации можно раскидать по отдельным инклюдникам как и в предлагаемом тобой варианте.

[skip]

O>Что думает уважаемое С++-сообщество по этому поводу?


"Я вам не скжу за всю Одессу"
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.