Рассмотрим на этот раз этот код. Не важно, что делает код, но как написан шаблон шаблона шаблона.C++ шаблоны и препроцессор C
С точки зрения плитки, код имеет ряд важных преимуществ.
гораздо меньше код шаблона.
Если вы решите взять больше параметров шаблона, вы измените только определение класса и
#define
.
Недостатки очевидны:
используя препроцессор
не так читаемый
просто странно
Есть ли что-нибудь стандартизован как это?
#include <cstdio>
template<typename T>
struct Summator{
Summator(T v1, T v2);
T value1();
T value2();
T sum();
bool great();
private:
T v1;
T v2;
};
#define Summator_(type) template<typename T> type Summator<T>
Summator_()::Summator(T v1, T v2) : v1(v1), v2(v2){};
Summator_(T)::value1(){
return v1;
}
Summator_(T)::value2(){
return v1;
}
Summator_(T)::sum(){
return v1 + v2;
}
Summator_(bool)::great(){
return v1 > v2;
}
int main(){
Summator<int> s{ 5, 6 };
printf("%d\n", s.sum());
}
Ближайший вероятно [ 'станд :: аккумулируют()'] (http://en.cppreference.com/w/cpp/algorithm/accumulate). –
@ πάνταῥεῖ Я думаю, что он ссылается на использование 'Summator_' для сокращения определения шаблона * shiver *. – TartanLlama
Не уверен, что я понял вопрос, но почему бы не использовать директиву C++ 11 'using'? –