私はその問題について考え始めたところです。すべてのC++テンプレートは、クラス(または関数)オブジェクトを返す「通常の」関数に置き換えることができますか?通常はコンパイル時プログラムを意味します。
そのため、C ++コンパイルでのテンプレートのインスタンス化を「通常の関数(コンパイラの解析ツリーなどで動作するコンパイル時プログラムを意味する)」に置き換えたいので、declerative構文は使用しません。
次のアイデアで、C ++のテンプレートメカニズム全体を置き換えることができると思いますか?この方法でテンプレートを理解しやすくなると思いますか?少し理論的な質問ですが、この質問の種類について話し合うのに最適な場所はどこかわかりません。
template<typename T>
struct A
{
int foo();
bool bar;
T data;
};
#if 0
class A(typename T) // class bulder after "("
{
class ret; // class object can only declared in class builder
ret.name = "whatever_compile_time_string";
ret += body // body is a class builder member with class declaration syntax
{
body(); // constructor
~body(); // destructor
int foo(); // method
bool bar; // member
};
ret += member(T, "data"); // "inject" a templated member
return ret;
}
#endif
int main()
{
A<int> a;
#if 0
// create a new class
typedef new class A(int) AInt;
// or
typedef new class A(int); // in this case class.name must be an initialized thing
#endif
}