В основном я делаю это:
auto result = from (startNodePtr)
.to<NodeT1>()
.to<NodeT2>()
.to<NodeT3>()
.fail_with(msg)
в погоне за указателями.Вы можете представить себе «от» и «до», возвращая различные шаблоны класса SyntaxSugar, и fail_with, возвращая результат.Работает нормально.
Но не все так просто.В зависимости от типов узлов, на которых я работаю, мне нужно вызвать некоторую операцию для базового типа.например:
auto result = from(startNodePtr)
.to<NodeT1>()
.to<NodeT2>() -> SomeOperation()
.to<NodeT3>()
.fail_with(msg)
Операции, в свою очередь, возвращают указатель, который мне снова нужно обернуть в SyntaxSugar.
как мне перегрузить operator->, чтобы правильно сделать это?
Скажите, что мой класс выглядит так:
template<typename Pointer_T>
class SyntaxSugar
{
Pointer_T ptr;
public:
explicit SyntaxSugar(Pointer_T ptr_)
: ptr(ptr_)
{}
// all kinds of Syntax Sugar
// this one I don't get to work:
auto operator-> () { return SyntaxSugar(ptr.operator->()); }
}