Нет, первая версия верна:
myfunc(*this);
Вторая версия, вероятно, будет работать в этом случае, но я не уверен, что она будет работать во всех случаях, если задействовано множественное наследование (так как вы используете приведение в стиле C). Я должен вытащить свой стандарт, чтобы посмотреть точное поведение C-Style.
Если это сработало, передавая указатель, тот же метод будет работать, если вы перейдете на использование ссылок.
Обновление:
Теперь, когда я прочитал стандарт, я вижу, что C-Cast будет делать правильные вещи (поскольку static_cast <> может использоваться для приведения иерархии классов от дочернего к родительскому).
5.4 Явное преобразование типов (нотация приведения)
4 Преобразования, выполненные
- const_cast (5.2.11),
- static_cast (5.2.9),
- static_cast, за которым следует const_cast,
- reinterpret_cast (5.2.10) или
- reinterpret_cast, за которым следует const_cast,
может быть выполнено с использованием приведенной нотации явного преобразования типов. Применяются те же семантические ограничения и поведения, за исключением того, что при выполнении static_cast в следующих ситуациях преобразование допустимо, даже если базовый класс недоступен:
- указатель на объект типа производного класса или lvalue или rvalue типа производного класса может быть явно преобразован в указатель или ссылку на однозначный тип базового класса, соответственно;
- указатель на член типа производного класса может быть явно преобразован в указатель на член однозначного не виртуального типа базового класса;
- указатель на объект однозначного не виртуального типа базового класса, glvalue однозначного не виртуального типа базового класса или указатель на член однозначного не виртуального типа базового класса может быть явно преобразован в указатель, ссылка или указатель на член типа производного класса, соответственно.
Если преобразование может быть истолковано более чем одним из перечисленных выше способов, используется интерпретация, которая появляется первой в списке, даже если приведенный в результате этого толкования является неверно сформированным. Если преобразование можно интерпретировать более чем одним способом как static_cast, за которым следует const_cast, преобразование является некорректным.