Можно ли сделать такШаблон в макросах на C++?
# define abc<T1> __abc<T1, T2>
template<typename T2> void somefun() {
...
abc<int>(...);
abc<double>(...);
...
}
Просто не писать его каждый раз, когда я называю а
Можно ли сделать такШаблон в макросах на C++?
# define abc<T1> __abc<T1, T2>
template<typename T2> void somefun() {
...
abc<int>(...);
abc<double>(...);
...
}
Просто не писать его каждый раз, когда я называю а
В C++ 11 вы можете сделать:
template<typename T2> void somefun() {
template <typename T>
using abc = __abc<T, T2>;
}
Без этого вы можете использовать макрос, но вам нужно будет:
#define abc(T1) __abc<T1, T2>
//usage:
abc(Type) instance;
, но поскольку это не выглядит очень естественным, я бы избегал это лично.
Если вы хотите, чтобы избежать макросоци- обработки перед C++ 11 вы можете сделать что-то вроде:
template <typename T2>
struct type {
template <typename T1>
struct lookup {
typedef __abc<T1,T2> type;
};
};
template <typename T2> void somefun() {
typedef type<T2> abc;
typename abc::template lookup<int>::type();
}
Но положа руку на сердце, что это менее читаемыми, чем даже макро случае
(Примечание: __abc
зарезервировано)
Я бы не использовал макрос, введите его полностью. Это неестественно выглядит и путает других и себя, когда стареет. Кроме того, он существует в файле заголовка и может вызвать проблемы с кодом вне заголовка. – Beached
Да, но вам нужно использовать круглые круглые скобки.
# define abc(T1) __abc<T1, T2>
template<typename T2> void somefun() {
...
abc(int)(...);
abc(double)(...);
}
Редактировать: Моя рекомендация не использует макросы для этой аббревиатуры вообще. Используйте решение для awoodlands или, возможно, параметр шаблона по умолчанию. И ты не должен использовать зарезервированные имена.
Интересно, и это работает, но делает код сложнее и труднее понять, потому что он похож на C-style casting :) – user1386738
Вы просили его, и вы его получили ;-) – hirschhornsalz
@ user1386738: «Он работает, но делает код сложнее и труднее понять "относится к большинству, если не ко всем макросам. – MSalters
(примечание: '__abc' зарезервировано) – Flexo
Не используйте макросы, чтобы удовлетворить вашу лень. Они просто делают вашу программу настоящей сукой для поддержания. –