それらのテンプレート化された関数を考えてみましょう
template <typename T> void Func(T* p)
{
printf("pointer ");
Func(*p);
}
template <typename T> void Func(T)
{
printf("type");
}
いくつかのポインター型の引数を与えると、ポインター型に特化した関数が再帰的に呼び出されてポインターがなくなるようになり、最後にポインターのない関数が呼び出されるように記述したいと思います。通常、私が書く場合
int a;
int* a2 = &a;
int** a3 = &a2;
int*** a4 = &a3;
Func(a4);
出力に書き込みたい
pointer pointer pointer type
残念ながら、そのように書くと、ポインタ以外の関数を呼び出すだけで済みます。
それを達成する方法はありますか?
関数を入れ替えるだけです。ではtemplate <typename T> void Func(T* p)
、あなたが行うときにFunc(*p);
、すべてのコンパイラは、程度であることを知っていますtemplate <typename T> void Func(T* p)
。したがって、ポインタがなくなったときにエラーが発生するまで、同じ関数を繰り返し呼び出すことになります。使用する場合
template <typename T> void Func(T)
{
printf("type");
}
template <typename T> void Func(T* p)
{
printf("pointer ");
Func(*p);
}
次に、呼び出すとFunc(*p);
、コンパイラはそれを認識しtemplate <typename T> void Func(T)
、ポインタがなくなったときに呼び出します。
pointer pointer pointer type
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加