Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как указать в интерфейсе статические функции? (число прочтений - 2332 )
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Как указать в интерфейсе статические функции?
12. Мая 2008 :: 11:00
Печать  
Народ, каким образом в интерфейсе для класса (типа IUserClass) указать, что какой-то спец.метод должен являться статическим и его реализация также обязательна?
Например,
Код
Выбрать все
class IUserClass
{
public:
  virtual void Method() = 0;
  static void StaticMethod(); ?????
}

class IUserClassImpl : IUserClass
{
public:
  virtual void Method();
  static void StaticMethod(); ?????
} 



Какие можно придумать варианты?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как указать в интерфейсе статические функции?
Ответ #1 - 12. Мая 2008 :: 11:03
Печать  
Вот такой вариант нормальный, как думаете?

Код
Выбрать все
class IUserClass
{
public:
  virtual void Method() = 0;
  static void StaticMethod()
  { static_cast<IUserClass*>(NULL)->SpecialVirtualStaticMethod(); }; ?????
protected:
virtual void SpecialVirtualStaticMethod() = 0;
}

class IUserClassImpl : IUserClass
{
public:
  virtual void Method();
protected:
  virtual void SpecialVirtualStaticMethod();
} 


  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как указать в интерфейсе статические функции?
Ответ #2 - 12. Мая 2008 :: 11:04
Печать  
Или все-таки статические методы лучше относить к деталям реализации?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Как указать в интерфейсе статические функции?
Ответ #3 - 12. Мая 2008 :: 11:27
Печать  
artbear писал(а) 12. Мая 2008 :: 11:00:
Народ, каким образом в интерфейсе для класса (типа IUserClass) указать, что какой-то спец.метод должен являться статическим и его реализация также обязательна?

Статический метод не может использоваться для реализации полиморфизма в рантайме. Т.е. указатель на суперкласс не может быть использован для вызова статического метода реального класса объекта. Поэтому статические методы не могут являться частью интерфейса. Естественно, это если мы говорим о рантайм-полиморфизме. А судя по твоему коду, речь идет только о рантайм. Поэтому в твоем случае нужно вообще отказаться от введения в интерфейс статических методов.

Если же у нас компайл-тайм полиморфизм, то, чтобы жестко потребовать наличия статической функции с нужной сигнатурой, достаточно взять ее адрес. Типа TempVar = &SomeClass::SomeStaticMethod.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать