Thread overview
C++-style mutable members
Jan 17, 2017
Nordlöw
Jan 17, 2017
ketmar
Jan 17, 2017
Nordlöw
Jan 17, 2017
ketmar
Jan 17, 2017
Namespace
January 17, 2017
Is there a way to mimic C++-style `mutable` members in D?
January 17, 2017
On Tuesday, 17 January 2017 at 20:21:34 UTC, Nordlöw wrote:
> Is there a way to mimic C++-style `mutable` members in D?
sure: don't use `const`. otherwise — no, there is simply no way to «mimic» 'em due to completely different meaning of `const` in D and C++.
January 17, 2017
On Tuesday, 17 January 2017 at 20:47:35 UTC, ketmar wrote:
>> Is there a way to mimic C++-style `mutable` members in D?
> sure: don't use `const`. otherwise — no, there is simply no way to «mimic» 'em due to completely different meaning of `const` in D and C++.

I'm aware of the difference. I'm just making sure there are no ways out of the type system ;)
January 17, 2017
On Tuesday, 17 January 2017 at 20:50:34 UTC, Nordlöw wrote:
> On Tuesday, 17 January 2017 at 20:47:35 UTC, ketmar wrote:
>>> Is there a way to mimic C++-style `mutable` members in D?
>> sure: don't use `const`. otherwise — no, there is simply no way to «mimic» 'em due to completely different meaning of `const` in D and C++.
>
> I'm aware of the difference. I'm just making sure there are no ways out of the type system ;)

besides brutally raping it with `cast` is accessor methods — no. ;-)
January 17, 2017
On Tuesday, 17 January 2017 at 20:21:34 UTC, Nordlöw wrote:
> Is there a way to mimic C++-style `mutable` members in D?

You could store a ptr to the member outside:

----
import std.stdio;

private int* _pid;

struct A
{
	int id;
	
	this(int id)
	{
		this.id = id;
		_pid = &this.id;
	}
	
	void foo() const
	{
		(*_pid)++;
	}
}

void main()
{
	A a = A(42);
	a.foo();
	
	writeln(a.id);
}
----