无论是通过编译器选项、#define
s、typedef
s 还是模板,每次我说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);