Я пишу библиотеку для эффективной обработки чисел. Я должен поддерживать разные типы номеров - double
, complex
или даже custom_matrix
, может быть. По соображениям производительности я решил скомпилировать отдельный библиотечный файл для каждого вида чисел, чтобы компилятор мог использовать агрессивные оптимизации для арифметических операций и вызовов функций. Теперь у меня есть два варианта - либо написать шаблонные классы с параметром number_type
, например,
template <typename valueType>
class Worker {
valueType process(valueType value);
};
или typedef
числовой вид в заголовочном файле для всего проекта, например,
in 'project.hpp':
namespace myProject {
typedef double valueType;
}
in 'worker.hpp':
#include "project.hpp"
namespace myProject {
class Worker {
valueType process(valueType value);
};
}
Лично я не могу согласиться с этим: код на основе шаблонов сводит меня с ума из-за множества избыточных ключевых слов template
и typename
, в то время как код на основе typedef не может быть скомпилирован в одном файле библиотеки (связывание не удается из-за повторяющихся имен), поэтому я не могу использовать разные типы номеров в одной программе.
Итак, вопрос: я что-то упустил? Есть ли лучший / более чистый способ выполнить мою задачу?
РЕДАКТИРОВАТЬ: я должен использовать double
и complex
код в одном приложении одновременно.
EDIT2: Хорошо, чтобы прояснить ситуацию: я разрабатываю движок арифметического выражения для приложения для iOS. Поэтому я ограничен C / C ++ / Objective-C, и производительность имеет решающее значение.
Кроме того, я чувствую себя комфортно при использовании шаблонов в обычных обстоятельствах. В моей ситуации все мои исходные файлы заполнены угловыми скобками и ключевыми словами template
/ typename
. Это просто раздражает и отвлекает меня от написания важных вещей.
Полагаю, я буду использовать шаблоны, поскольку, насколько я вижу, лучшего решения не существует.