2012-02-27 8 views
0

関数テンプレートの定義では、テンプレートパラメータのインスタンス化は一般的には不明です。型特性は、コンパイル時にいくつかの情報を得るために使用できます。例えば、ここでis_pointerの簡単なアプリケーションです:テンプレート以外の関数のパラメータのC++特性?

template <typename T> 
void foo(T p) { cout << is_pointer<T>::value << endl; } 

私の質問はこれです:状況が特徴のような、コンパイル時に機能が有用提供できる非テンプレート機能、で、今までにあり情報?

+0

あなたはすでに知っているタイプについて何を知りたいですか? – perreal

+0

@perreal:私の答えを見てください。 –

答えて

4

はい:

#include <iostream> 
#include <limits> 

int main() 
{ 
    std::cout << "Max value of an int on your platform is " 
       << std::numeric_limits<int>::max() << "\n"; 
} 

これが頭に浮かんだ最初の例です。私は他にもたくさんあると確信しています。より一般的には、コンパイル時に "lookup"型のキー入力が可能です。明らかに、テンプレート以外の状況では、同じことがマクロ定義(INT_MAXなど)で達成できます。

+0

ありがとう、オリー、面白い答えです。私は実際に、関数を与えられた場合、字句的に "X"と表記されたパラメータを持つ "X"について、提供される引数に応じて変化する状況を実際に探していると言いながら、あなたの辛抱強さをテストします。 (私は答えはおそらくノーだと思っていますが、私は絶対に確信していません) – user2023370

+0

オクラホマ、私は諦めます。あなたが提供するものは「有用な情報」です。私の以前のコメントの意味では、私は答えがノーだと思う。 – user2023370

+0

@ user643722:申し訳ありませんが、私はあなたの前のコメントを逃しました。私はあなたが「実行可能な情報に基づいて何かを行うことができますか?」と尋ねていると思います。その場合、答えは「いいえ」です。 –

0

積分型などの最大値や最小値などの基本タイプに関するコンパイル時間情報を調べる場合を除き、

タイプ形質の本当のメリットは、sfinaeで制御フローを追加するか、誤ったタイプが使用されたときに、より良いエラーを生成することによって、テンプレートメタプログラミングを支援することです。

関連する問題