Вы можете заключить переданный параметр в класс шаблона, который вы можете вывести, например, диспетчеризацию тегов:
template<bool s>
struct A_index { // A shorter name based on your use case
int i;
};
struct A {
template<bool s> auto operator[](A_index<s> i_) {
int i = i_.i;
// Use `i`
}
auto operator[](int i) { (*this)[A_index<true>{ i }]; } // For your default = true
};
int main() {
A s;
s[A_index<false>{1}];
using t = A_index<true>;
s[t{0}];
}
Или вы можете иметь вспомогательную структуру шаблона, которая имеет ссылку A&
, где Структура имеет параметры шаблона:
struct A {
};
template<bool s = true>
struct A_index {
A& a;
auto operator[](int i) { }
};
int main() {
A s;
A_index<false> view{ s };
view[1];
}
Или вы можете просто использовать неоператорные функции-члены.