Возможно ли перегрузить операторы класса C++ в статическом контексте? напримерПерегрузка статического оператора C++
class Class_1{ ... }
int main()
{
Class_1[val]...
}
Возможно ли перегрузить операторы класса C++ в статическом контексте? напримерПерегрузка статического оператора C++
class Class_1{ ... }
int main()
{
Class_1[val]...
}
Если вы ищете метапрограммирование с помощью встроенного оператора: такая вещь невозможна - встроенные операторы работают со значениями времени выполнения, а не по значениям времени компиляции.
Вы можете использовать boost::mpl
для этого, и вместо того, чтобы использовать встроенные операторы, использовать свои шаблоны, как at
для op[]
, plus<a, b>
для op+
и т.д.
int main() {
using boost::mpl::vector;
using boost::mpl::at_c;
using boost::mpl::plus;
using boost::mpl::int_;
typedef vector<int, bool, char, float> Class_1;
typedef vector< int_<1>, int_<2> > Numeric_1;
at_c<Class_1, 0>::type six = 6;
typedef plus<at_c<Numeric_1, 0>::type
,at_c<Numeric_1, 1>::type>::type r;
int i3[r::value] = { 4, 5, 6 };
return ((i3[0] + i3[1] + i3[2]) * six) == 90;
}
Если вы имеете в виду оператор работает на классе, № Это не имеет смысла, это как сказать, operator +
мая оператор на int
или double
. Операторы являются синтаксическим сахаром для функций, и они работают с переменными (значениями), а не типами.
Имеет смысл, если у вас есть какой-то класс утилиты - только с статическими членами - который загружает что-то в «себя», что тогда вы хотели бы получить доступ самым простым способом - с использованием оператора типа '[]'. –
Да, добавив комментарий @ jave.web: он может иметь смысл в случаях *, когда в статическом объеме * класса есть данные. (OP также упоминает статическую область явно). Таким образом, не с простой арифметикой, как в вашем примере, но такие вещи, как [],(), <<, > и т. Д., Могут быть идеальным синтаксическим сахаром для любых классов сложных менеджеров , не заставляя одноэлементный экземпляр. –
Я не верю, что это возможно, хотя я мог ошибаться на этом фронте. Я хотел бы спросить, почему вы хотите это сделать. Вместо того, чтобы выполнять операции над классом вместо экземпляров, возможно, вам просто нужен один экземпляр во всем приложении? В этом случае вы, вероятно, должны использовать the singleton pattern.
Раньше я использовал одноэлементный шаблон, похожий на сумасшедший, но затем остановился, потому что одноэлементный код - это такая проблема, с которой нужно писать тесты. – jameszhao00
Нет, операторы не могут быть статическими членами класса. Вместо этого используйте обычную статическую функцию.
В случае, если 'Class_1 [вал]' выход в тип? Как вы ожидаете сделать 'Class_1 [val] v;'? –
Я собирался получить интегральные значения, но типы в порядке. – jameszhao00
В C++ типы не могут быть представлены в системе типов (есть только 'std :: type_id'), и я не могу думать о каком-либо операторе, который может быть перегружен статически. Я предлагаю вместо того, чтобы спросить, возможна ли ваша идея реализации на C++, вы представляете фактическую _проблему_, которая должна была решить. Кто-то может предложить возможную реализацию. – sbi