前些日子有人在PTT C++版問了99乘法表相關的問題,於是我手癢就寫了一個C++ Meta-Programming的版本,沒用真正寫過Meta-Programming,因為感覺上實在是太炫技了,像是帕格尼尼的炫技曲似的,如果inline最佳化都成功的話,應該是會整個被展開來,用的是編譯時間來換效能,因為和一般的程式寫法和思考方式都不太一樣,所以這樣的東西還是盡量別亂用的好,不然別人通常都難以維護,所以這只是純寫好玩的
如果你在修C++的課,剛好遇到99乘法表的作業,或許你可以把這拿去交,看助教看了會有什麼反應 XD
以下是程式碼
#include
using namespace std;
inline void printLine(int i, int j) {
cout << i << " * " << j << " = " << i * j << endl;
}
template
struct Line {
inline static void print() {
Line::print();
printLine(I, J);
}
};
template
struct Line {
inline static void print() {
printLine(I, 1);
}
};
template
struct Group {
inline static void print() {
Group::print();
cout << endl;
Line::print();
}
};
template
struct Group {
inline static void print() {
Line<1, NUM>::print();
}
};
template
struct Meta99 {
inline static void print() {
Group::print();
}
};
int main() {
Meta99<20>::print();
return 0;
}
原始碼都被跳脫啦~
改好了,只是多了個code標籤真討厭= =
如果能和你多多交流,肯定能学到不少的东西。
我来放个自己写的:
#include
template
struct Calc_I_mult_J
{
static void f(){
Calc_I_mult_J::f();
std::cout<<I*J<<"t";
}
};
template
struct Calc_I_mult_J
{
static void f(){
std::cout<<J<<"t";
}
};
template
struct CalcLine
{
static void f()
{
CalcLine::f();
Calc_I_mult_J::f();
std::cout<<std::endl;
}
};
template
struct CalcLine
{
static void f(){}
};
int main()
{
CalcLine::f();
return 0;
}
二二十乘法表XD