2014-01-22 4 views
2

Возможно ли реализовать арифметические операторы в add.js C++ addon?Реализация JS-арифметических операторов в node.js C++ addon

Так что если myclass - объект JS, завернутый из класса C++, могу ли я реализовать javascript «+» в классе завернутых функций C++, чтобы следующий код работал?

var a = new myclass(); 
var b = new myclass(); 
var c = a + b; 

Это позволило бы более элегантный обработки арифметических операций на соответствующих объектах (если MyClass представляет собой вектор или матрицу класса, например). На данный момент единственным решением является объявление нормальной функции для обработки операторов, например:

var c=a.add(b); 

Но это не приятно. Надеюсь, кто-то, кто знает об этом, может ответить на этот вопрос.

+0

С какой целью? Я не совсем уверен, что понимаю. Возможно, вы просто спрашиваете: «Могу ли я определить' + 'для двух объектов типа' myclass', на которые отвечает _yes, C++ поддерживает перегрузку оператора_. –

+0

Я очень сомневаюсь, что это возможно. Однако перегрузка оператора не является волшебством. Магия находится в перегрузке метода по типу, что было бы гораздо более полезным. К сожалению, я сомневаюсь, что это будет возможно. – Homer6

+0

Спасибо за ваши ответы. Я не говорю о перегрузке оператора в C++, но для реализации в классе аддонов C++ оператора javascript +. Вопрос имеет смысл, так как я пытаюсь реализовать некоторую сторону класса C++ с матричным классом, и их соответствующие объекты javascript ведут себя естественным образом. Поскольку я не вижу лучшего способа сделать это, я просто буду реализовывать функции .add (object), .substract (object) и т. Д. – Nunki

ответ

0

К сожалению, поведение оператора + не подлежит изменению.

Спецификация JavaScript спецификации ECMA-262 определяет оператор + как либо добавление двух чисел, либо объединение двух строк. Для этого реализация вызывает .toString() и/или .valueOf(), а затем выполняет конкатенацию или добавление. Ничто из самого оператора никогда не подвергается реализации кода C++. Код C++ может влиять только на строку/значение, возвращаемое для обработки.

Смежные вопросы