タイプとそのタイプのオブジェクトを指定すると、実際のオブジェクトにアクセスしながら、タイプが整数かどうかに基づいて決定できる C++ テンプレートが必要です。私はこれを試しました
template <typename T, T &N>
struct C {
enum { Value = 0 };
};
template <int &N>
struct C<int, N> {
enum { Value = N };
};
しかし、うまくいきません。同様のことを達成する方法はありますか?
編集
私が達成しようとしていたのは、コンパイル時に発生する次のようなものでした。
if (type is int) {
return IntWrapper<int_value>
else {
return type
}
次のように、テンプレートのインスタンス化でオブジェクトへのポインターまたは参照を実際に渡すことができます。
struct X {
static const int Value = 5;
};
template <X *x>
struct C {
static const int Value = (*x).Value;
};
X x;
std::cout << C<&x>::Value << std::endl; // prints 5
しかし、どうやらこれで達成できるのは、x
の型を推測してテンプレートを初期化することだけであり、x
グローバルに宣言する必要もあります。私がやろうとしていることは何の役にも立ちませんが、コンパイル時には結局不可能だと思います。