#define
コンパイラ オプション、 s、 s、またはテンプレートのいずれかを使用して、コンパイラに対して、typedef
私が言うたびT
に本当に意味することを示す最も簡単で目立たない方法は何T const
ですか? 外部プリプロセッサを使用しないことをお勧めします。私はキーワードを使用していないのでmutable
、変更可能な状態を示すために再利用することは許容されます。
編集:これの意図は完全に間違っていたので(そして明確にするために私が数時間近くにいなかったので)、説明させてください. 要するに、コンパイル時に型システムを操作するために利用できるシステムを知りたいだけです。これにより、非標準の、悪い、保守不可能な、役に立たないコードが作成されるかどうかは気にしません。本番環境では使用しません。それはただの好奇心です。
これまでの潜在的な (次善の) 解決策:
// I presume redefinition of keywords is implementation-defined or illegal.
#define int int const
#define ptr * const
int i(0);
int ptr j(&i);
typedef int const Int;
typedef int const* const Intp;
Int i(0);
Intp j(&i);
template<class T>
struct C { typedef T const type; typedef T const* const ptr; };
C<int>::type i(0);
C<int>::ptr j(&i);