は、私が直面してる状況再現するいくつかのサンプルクラスです:C++関数の引数として任意のポインタここ
class A {
B* seccond;
}
class B {
int * number;
}
static NTSTATUS Read(std::uintptr_t address, size_t size, PVOID buff);
// Let's assume we have object 'obj' which has valid address of number variable
int buff;
Read(obj.seccond, sizeof(int), &buff);
Error: cannot convert argument 1 from 'int *' to 'uintptr_t'
私はそれがで簡単に固定することができます知っている:
Read(std::uintptr_t(obj.seccond), sizeof(int), &buff);
をしかし、これではありませんコードの読みやすさを低下させ、ちょうど醜いから十分満足です。私は本当にテンプレートを使用したくないのです。なぜなら、彼らはすでにどこにでもいるからです。 このような変数には単純なコンテナがありますか?それをやるよりエレガントな方法?
編集:私は再適応してきた質問、申し訳ありません
'std :: uintptr_t'はポインタ型ではありません。整数です。暗黙の変換は多くの問題を引き起こします(例についてはCの歴史を見てください)。 – molbdnilo
*テンプレートは既にあなたのコードのどこにでもあります* ...もう一度作る:) –
私は知っていますが、私は他のプロセスのアドレス空間にポインタを保持しています。 'Read'関数に渡されるべきuint値です。だからこそ、その方法はありませんか? –