Как решить проблему?
От: Аноним  
Дата: 26.07.05 18:33
Оценка:
class Interface
{
public:
virtual static bool Can() const = 0;

};

class CBase : public Interface
{

public:

static bool Can() const;
};

Вот что хотелось бы, но как?
Re: Как решить проблему?
От: Lorenzo_LAMAS  
Дата: 26.07.05 18:42
Оценка:
Если функция статическая, то на основании чего ты хочешь определять, какую вызвать? Как ты стал бы использовать сие чудо, если бы оно работало?
Of course, the code must be complete enough to compile and link.
Re[2]: Как решить проблему?
От: Аноним  
Дата: 26.07.05 18:56
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Если функция статическая, то на основании чего ты хочешь определять, какую вызвать? Как ты стал бы использовать сие чудо, если бы оно работало?


т.е. убрать из интерфейса ?
Re: Как решить проблему?
От: gbt Россия  
Дата: 27.07.05 01:56
Оценка:
Hello, , you wrote:

> class Interface
> {
> public:
>         virtual static bool Can() const = 0;

> };

> class CBase : public Interface
> {

> public:

>         static bool Can() const;
> };


Обычные виртуальные функции — функции, поведение которых зависит от типа
объекта, для которого их вызывают. Как же вы собираетесь использовать
виртуальные статические функции, ведь статические функции вызываются не для
объекта, а для класса...

Возможно, то, что вам нужно — это патерн Singleton. Он позволяет при запуске
(или инициализации) программы, а может и отложенно, создавать единственный
экземпляр Объекта, реализующего некоторый интерфейс. А затем получать доступ к
этому единственному объекту через интерфейс.

> class Interface
> {
> public:
>         virtual bool Can() const = 0;

> };

> class CBase : public Interface
> {

> public:
>         bool Can() const;
> };

typedef Singleton<Interface> MySingleton;

int main()
{
    MySingleton::instance()->Can();
}

Таким образом вы можете получитьэмуляцию статических виртуальных функций.
Как реализовать template class Singleton ? Читайте Gang Of Four или
воспользуйтесь поиском.

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.