2015-01-09 2 views
1

Возможно ли (просто) достичь поведения шаблона C++ без наличия шаблонов? Я использую встроенную C++ toolchain, у которой нет этой функции, но это было бы полезно, если бы я мог ее реплицировать.Достижение поведения шаблона C++ без наличия доступных шаблонов

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

+4

Шаблоны целый язык программирования, так что нет. Но вы могли бы реплицировать * некоторые * функции с помощью макросов, сценариев генерации кода или 'constexpr', хотя я сомневаюсь, что ваша встроенная инструментальная цепочка поддерживает последнюю. – juanchopanza

+3

Ближе всего вы можете получить некоторые препроцессорные макроопределения IMHO, но ничего с совместимым синтаксисом. Другим вариантом может быть использование интерфейса C++ для генерации c промежуточного кода. –

+0

Хммм, нет, у меня нет последних особенностей. –

ответ

3

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

#define GenerateCircBufClass(T)\ 
class CircBuf_impl_##T \ 
{\ 
public: \ 
    CircBuf_impl_##T(); \ 
    ~CircBuf_impl_##T(); \ 
    // etc... 
}; 

GenerateCircBufClass(uint8_t) 
GenerateCircBufClass(float) 
// etc... 
+0

Все это кажется довольно интересным. Спасибо, я попробую! –

+0

Я предполагаю, что потеряю способность отлаживать это, так как мне придется полностью определить реализацию в препроцессоре? –

+0

@EdKing Компиляторы обычно предоставляют вам средства для получения результата прогона предварительной обработки (например, флаг '-S' в gcc). Таким образом, вы могли бы генерировать реальные исходные файлы на C++, если это необходимо, а затем скомпилировать их. – juanchopanza