0

重複の可能性:
C++03 に typeof 演算子がない?

テンプレートを使用して、C++0x 以前の C++ で移植可能な式のコンパイル時の型を取得することは可能ですか?

何かのようなもの:

int foo() { return 0; } //Let's say we have this
typeof(foo()) x;        //x would now be of type 'int'

ただし、テンプレートを使用しているため、明らかにわずかに異なる構文が必要になる場合があります。

(ここや Web の他の場所で多くの重複を見てきましたが、それらはコンパイラ固有の機能または C++0x (C++11?) のdecltype機能に依存しているようです。)

4

3 に答える 3

6

一般の場合は無理です。そして、はい、長年にわたってこの問題にかなりの努力が注がれてきました.

特定のケースで式の型を決定するための多くのトリックがあります(たとえば、ファンクターは通常、戻り値の型を示す typedef で注釈が付けられます) decltype。 +0x。標準化委員会は、ライブラリが同じようにできることを行うためにコア言語機能を追加しないというポリシーに従います。

于 2011-05-31T06:44:09.427 に答える
2

実装はわかりませんが、Boost.Typeofを見てください。

于 2011-05-31T06:33:33.830 に答える
0

それは不可能です。関数/メソッドで実行できる唯一のコンパイル時操作は ですsizeof()。これは、型の推定に役立ちません ( などtypeid)。

于 2011-05-31T06:34:38.963 に答える