型とその型のオブジェクトを指定すると、型が整数かどうかに基づいて実際のオブジェクトにアクセスできるようにすることができます。私はこれを試した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
もグローバルに宣言する必要があります。私がやろうとしていることに対しては使用しません。コンパイル時には結局は不可能だと思います。
クラステンプレートでは、テンプレートタイプの引数を明示的に指定する必要があるため、関数テンプレートが必要なようです。あなたは何をしようとしているのかを明確にするための使用例を投稿できますか? –
@j_random_hacker:テンプレートを空白のままにして、特殊なクラスを持つことができます...テンプレートタイプを指定する必要はありません。 – Partial