Форум
C/C++. Прикладные вопросы
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, sizeof_void, Вы писали: _>Здравствуйте, Maxim Yurchuk, Вы писали: MY>>Похоже я нашел один workaround, который обладает обратной совместимостью (в моем случае) и позволяет генерировать код, который мне хочется. MY>>Достаточно заменить интерфейс MY>>[code] MY>>struct IInterface MY>>{ MY>> virtual void Foo() = 0; MY>>}; MY>>[/code] MY>>На следующий код: MY>>[code] MY>>struct IInterfaceVirtual MY>>{ MY>> virtual void Foo() = 0; MY>>}; MY>>struct IInterface : protected IInterfaceVirtual MY>>{ MY>> __declspec(nothrow) void Foo() volatile MY>> { MY>> return static_cast<IInterfaceVirtual*>(const_cast<IInterface*>(this))->Foo(); MY>> } MY>>}; MY>>[/code] MY>>volatile нужен для того, чтобы функция из IInterface была не виртуальной (скорее всего, можно заменить volatile на const). В этом случае компилятор поймет аттрибут __declspec(nothrow) и сделает как надо. MY>>На первый взгляд решение выглядит более-менее. Может быть, я что-нибудь не учел? _>У тебя тут получаются [b]2 разные функции[/b] Foo(). Одна не-'volatile' и виртуальная, другая 'volatile' и не виртуальная. _>Получается, что по указателю на баз.класс ты не вызовешь свою производную функцию. _>Тебе разве такое поведение нужно?
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …