このように不完全な構造体を使用する C のコードがあります (簡略化された例):
何か.h
struct something;
struct something *new_something();
int work_a(struct something *something);
int work_b(struct something *something, const char *str);
void free_something(struct something *something);
somecode.c
int some_function()
{
struct something *something;
int x;
something = new_something();
x = work_a(something);
free_something(something);
return x;
}
私は基本的にここで C++ をやっているのですが、 C++ で書いてみませんか。問題は (私は C++ の初心者です)、どうすれば C++ で同じことを達成できますか? 不完全なクラスのメンバー関数を追加宣言しようとすると、
error: incomplete type 'something' named in nested name specifier
クランから。ヘッダーに完全なクラスを記述すると、データを隠すという点がすべて失われ、クラスのプライベート変数を変更すると、「something.h」を含むすべてのファイルが強制的に再コンパイルされますが、ここでは必要ないと思います。この構造体/クラスのサイズを知るために「something.h」を使用するファイルは必要ありません。通常はポインターだけで問題ありません。私はそれが次のようになるべきだと思った:
class Something;
Something::Something();
Something::~Something();
int Something::work_a(int x);
このようにして、C で書いたのと同じことを、より短く、さらにきれいに書くことができました。この致命的な C コーダーを啓蒙したい C++ コーダーはいますか?