Я хотел бы условно включить функции (или, в частности, конструкторы) в зависимости от типа переменной I, определенного на уровне препроцессора, например.Препроцессор C++
#define my_type double
и в любой момент я могу условно включать функцию
#if my_type == double
void my_fct();
#endif
, который работает отлично. Однако, как это сделать, если я хочу назначить шаблонный тип для my_type. Используя сложный двойной, например, я бы наивно просп мысль
#if my_type == complex<double>
будет работать, но препроцессор кажется интерпретировать последний «>» в качестве оператора на уровне препроцессора. Я не вижу способа использования typedefs, так как я хочу, чтобы препроцессор выполнял условное включение. Конечно, я мог бы создать шаблон для всего класса и не использовать препроцессор для этой задачи, но сейчас я бы предпочел не делать этого. Кроме того, всегда можно определить еще один флаг препроцессора в дополнение к типу, но это кажется довольно грязным.
Знаете, вы можете сделать функцию шаблоном, а не всем классом, если хотите. – icabod
Я полностью не согласен с тем, что ваше последнее решение «кажется довольно грязным».Используйте typedefs для псевдонимов типов и препроцессор для условного кода. – molbdnilo