クラスを考慮すると、Fooのは、私が実際に戻り値の型がテンプレート化されたテンプレート、あるオペレータ[]オーバーロードを定義したいですしかし、私はそれを使用する方法を把握することはできません。呼び出すときに型を指定する場所はわかりません。これは、コンパイルしてのいくつかの種類の実際の実装を与えC++演算子のテンプレート戻り値の型は[]
Foo foo;
int myFooInt = foo.at<int>(32); // gets an int at position 32
:ようにその後、私は何かを行うことができます
class Foo
{
template<typename T> T at(size_t i)
{
return *(reinterpret_cast<T *>(get some pointer));
}
}
:参考例を提供するために、で私は[]関数名をオペレータに置き換えると仮定「いくらかのポインタを取得する」ことによって提供される位置指定メモリは、正しい値を返します。 (注、私は "ポジション"が何を意味するかについての情報は提供していません。この場合、私の質問には関係ありません)。
しかし、私はどのように/ []を使用すると入力します。ところで
は、次の作業を行います。
int myFooInt = foo.operator[]<int>(32);
が、このような何かはコンパイルされません:
int myFooInt = foo[32]<int>;
もこれを行います:
int myFooInt = foo<int>[32];
は、どのようなIです私も可能なことをしようとしていますか?
ありがとうございます。
'foo.operator []'は、このようなテンプレートを使用する唯一の方法です。他の選択肢はありません。 –
[std :: any](http://en.cppreference.com/w/cpp/utility/any)または[boost :: any](http://www.boost.org/)の配列を考えましたか? doc/libs/1_66_0/doc/html/any.html)?あなたの 'Foo'クラスはすでに' std :: any'を行っているようです。 – PaulMcKenzie
提案していただきありがとうございますが、この場合、インデックスは実際にはcharインデックスであり、そのベースでオフセットを計算した後は、戻り値の型への型キャストのみです。 (つまり、iバイトを汎用バッファに格納したint(またはfloatなど)を取得します)。 –