Форум программистов, компьютерный форум, киберфорум
MrAndrey_ka
Войти
Регистрация
Восстановить пароль
Оценить эту запись

странное поведение синонимов класов

Запись от MrAndrey_ka размещена 23.11.2014 в 16:28

Цитата:
Сообщение от MrAndrey_ka Посмотреть сообщение
да но так вылазит следующая проблема:
елси написать
C++
1
2
3
inline friend TSmartString operator + (const P_Str Val1, const TSmartString& Val2);
template <class Type2>
inline friend TSmartString operator + (const Type2 Val1, const TSmartString& Val2);
то
GT2 = L"qqqq"+GT2;
GT2 = B+GT2;
в обеих случаях произойдет вызов первого оператора
а вот если
C++
1
2
3
inline friend TSmartString operator + (const Type* Val1, const TSmartString& Val2);
template <class Type2>
inline friend TSmartString operator + (const Type2 Val1, const TSmartString& Val2);
то один вызовет верхний а второй нижний, и даже то что это приведет к тем же результатам, то по времени выполнения это совсем разные вещи
и чтобы перекрыть это поведение во втором случае придется писать еще 2 оператора
inline friend TSmartString operator + (Type* Val1 const, const TSmartString& Val2);
и
inline friend TSmartString operator + (Type* Val1, const TSmartString& Val2);

а это 3 идентичных функции с одинаковым кодом, и тоже самое придется делать для остальных операторов =, +=, << что вовсе не к месту.

Вообще то данный принцип подсмотрел у того же CString


Не знаю на долго ли но пока помогло вот что:
добавил
typedef typename const Type* PС_Str;
и соответственно

2
3
4
5
P_Str *Buf = NULL;

void SetValue(size_t Size, PС_Str Val, size_t Len);

VRTSmartStr(PС_Str Val, size_t Size = 0);
Размещено в Без категории
Показов 1450 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru