On Monday, 7 March 2016 at 10:52:53 UTC, Ola Fosheim Grøstad wrote:
On Sunday, 6 March 2016 at 17:53:47 UTC, Namespace wrote:
What would be the C++ way? Is there any comfortable way to solve this problem in a nice way like D?

C++ has a non-idiomatic language culture. There are many ways to do it. One clean way could be to use a templated method, another way is to use a function object, a dirty way would be to use a const-cast.

Another thing in C++ is that you can overload members on rvalue and lvalue references, from http://en.cppreference.com/w/cpp/language/member_functions :

#include <iostream>
struct S {
    void f() & { std::cout << "lvalue\n"; }
    void f() &&{ std::cout << "rvalue\n"; }
};

int main(){
    S s;
    s.f();            // prints "lvalue"
    std::move(s).f(); // prints "rvalue"
    S().f();          // prints "rvalue"
}


Of course, all of this is just because you don't get to specify the type of the "this" pointer... So not as clean as it should be, but that applies to both languages. Adding lots of syntax with no real semantic benefits.


Reply via email to