考慮一下這段代碼。代碼的作用並不重要,但是如何編寫模板樣板代碼。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'指令? –