スカラー型またはインデックス付き型のいずれかを取ることができるテンプレートクラスがあり、その型に応じて異なるバージョンの関数を呼び出したいと思います。
template <typename Ta, typename ... T>
struct MyClass {
Ta tt; //can be either a scalar (double, complex<double>, int, etc),
//or an indexed type (MyClass, std::vector<double>, double[], etc)
//....
//I would like the following to be called when tt is a scalar type:
auto operator[]( size_t i ) { return tt; };
//I would like the following to be called when tt has [] overloaded:
auto operator[]( size_t i ) { return tt[i]; };
};
これを行う方法はありますか?戻り値SFINAEは機能しません(この関数にはテンプレートパラメーターがないため)、クラスベースのSFINAEは機能しないようです(可変個引数テンプレートにより、最後にダミーのテンプレートパラメーターが機能しないため)。他のアイデアはありますか?