[C++] ”プログラミング入門” : GUIソースコード修正 Graph.h, Graph.cpp

[M1 Mac, Big Sur 11.6.7, FLTK 1.3.8, clang 13.0.0, no IDE]

最もボリュームがあるのがGraphファイルです。

FLTK1.1に対応した内容なのでFLTK1.3.8が使えるように書き換えました。コードがコメントアウトになっているところは復活させるかもしれないので残しておきました。

C++では自前で用意すべきerror関数がないのはご愛嬌でしょうか。

あれだけの多作家ですからコードのメンテナンスができていないところに人間味を感じます。ただ絶版にはなっていないので出版社含めちゃんとして欲しいですね。

2022/6/17追記:
ストラウストラップ氏HPのsupport code for PPP2 (tar ball)にfltk.hを含むtarがあります。fltk.hはFLTKの各種ヘッダファイルをグループ化したものです。FLTK1.1でもFLTK1.3.8でも同じように使えるはずです。

#ifndef GRAPH_GUARD
#define GRAPH_GUARD 1

#include "Point.h"
#include <FL/Fl.H>
#include <FL/fl_draw.H>
#include <iostream>
#include <stdio.h>
#include <vector>
#include <cmath> // コメントアウトになっていた

using std::string; using std::initializer_list;
using std::vector; using std::cout;

// このエラー関数が存在していなかった
void error (const char* message) ;

namespace Graph_lib {
#undef major
#undef minor

struct Color {
	enum Color_type {
		red=FL_RED, blue=FL_BLUE, green=FL_GREEN,
		yellow=FL_YELLOW, white=FL_WHITE, black=FL_BLACK,
		magenta=FL_MAGENTA, cyan=FL_CYAN, dark_red=FL_DARK_RED,
		dark_green=FL_DARK_GREEN, dark_yellow=FL_DARK_YELLOW, dark_blue=FL_DARK_BLUE,
		dark_magenta=FL_DARK_MAGENTA, dark_cyan=FL_DARK_CYAN
	};
	enum Transparency { invisible = 0, visible=255 };

	Color(Color_type cc) :c(Fl_Color(cc)), v(visible) { }
	Color(Color_type cc, Transparency vv) :c(Fl_Color(cc)), v(vv) { }
	Color(int cc) :c(Fl_Color(cc)), v(visible) { }
	Color(Transparency vv) :c(Fl_Color()), v(vv) { }

	int as_int() const { return c; }
	char visibility() const { return v; }
	void set_visibility(Transparency vv) { v=vv; }
private:
	unsigned char v;
	Fl_Color c;
};

Graph.h, Graph.cpp 全ソースコード