Russian Qt Forum
Ноябрь 22, 2024, 17:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Еще с темплейт  (Прочитано 7643 раз)
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #15 : Сентябрь 10, 2015, 20:54 »

овчинка не стоит выделки.
лучше не использовать шаблон.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Сентябрь 11, 2015, 12:48 »

А можно так?
Код
C++ (Qt)
template <class T>
void DoErase( const T *, Node * node, size_t index )  { static_assert(false, "Invalid T"); }
 
template <>
void DoErase( const MyClass1 *, Node * node, size_t index )  { node->data1.erase(index); }
 
template <>
void DoErase( const MyClass2 *, Node * node, size_t index )  { node->data2.erase(index); }
 
Это ничего не дает - ведь вставить DoErase в базовый класс я не могу - вызовется первый вариант.

овчинка не стоит выделки.
лучше не использовать шаблон.
Можно просто виртуалом
Код
C++ (Qt)
virtual void MyClass1::DoErase( Node * node, size_t index )  { node->data1.erase(index); }
virtual void MyClass2::DoErase( Node * node, size_t index )  { node->data2.erase(index); }
 
Но такие виртуалы мне придется делать для каждого обращения к data1/data2  Улыбающийся Правда здесь оно 1 и есть. Если было бы больше - тогда наверное ото <traits>
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #17 : Сентябрь 11, 2015, 15:57 »

Можно ещё так извратиться:

Код
C++ (Qt)
class MyClass
{
 
void MyClass::DelRows( void )
{
   for (int i = 0; i < count; ++i) {
       erase(node, i);  
   }
}
 
protected:
   std::function<void (Node*, size_t)> erase;
 
};
 
 
class MyClass1 : public MyClass
{
 
public:
   MyClass1()
   {
        erase = [](Node* node, size_t i) { node->data1.erase(i); };
   }
};
 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 22.