Требуют ли перегруженные операторы внутри классов __declspec (dllexport), если они используются в проекте DLL? - PullRequest
2 голосов
/ 25 марта 2011

При использовании __declspec(dllexport) должен ли перегруженный оператор также иметь этот флаг экспорта?Например, скажем, у вас есть что-то вроде:

/* 
Overloaded operator (equivalent operator) returns true if x equals compared vector
*/
__declspec(dllexport) bool operator ==(const vector &v)
{
  return (x == v.x && y==v.y && z==v.z);
}

Нужно ли __declspec(dllexport) для использования == в вашем типе класса?Или это не должно быть экспортировано, потому что это специфично для этого класса и любых унаследованных классов?

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Обычно вы применяете __declspec (dllexport) к объявлению класса, чтобы экспортировать весь shebang. Также экспортирует v-таблицу, важно, если у класса есть виртуальные члены. Делать это одним участником в то время довольно утомительно и хлопотно.

Не знаю, почему вы пропустили перегрузку. Если вы сделали его общедоступным в классе, то вам определенно следует показать его и из DLL. Если вы этого не сделаете, то когда-нибудь кому-то будет очень трудно диагностировать ошибку компоновщика.

3 голосов
/ 25 марта 2011

Подобная функция обычно будет встроенной. Я не могу себе представить, почему вы захотите вместо этого вызвать кросс-модульный (косвенный и исправляющий) вызов функции.

Но я советую не экспортировать классы, так как это создает тесную связь между двумя библиотеками DLL, что впоследствии вызывает головную боль при обслуживании.

...