4

たとえば、最初のタイム スロットは 30 分ですが、2 番目のタイム スロットは 40 分にすることができ、最初の利用可能なスロットは (同等の値で) から開始します。に) 1.

私が今やりたいことは、このクラスが取る最大値と最小値をどうにかして定義することです。そのためには、2 つの実際的な質問があります。

1.- カスタム クラスに対して、そのような方法で絶対最小値と最大値を定義することは理にかなっていますか? または、クラスで定義された関係演算子を考慮して、最小値を定義するために、値が常に型の他の可能な値よりも低いものとして比較するだけで十分ですか? (そして同様に最大)

2.- 前の質問に「はい」(または「はい、でも ...」) をモデルにした回答があると仮定すると、そのような最大/最小をどのように定義すればよいですか? あることは知っていますstd::numeric_limits<>が、私が読んだことから、それは「数値型」を対象としています。それを「数として表される」と解釈するか、それとも「数で表される」とか「整数に対応する」などのより広い仮定をすることができますか? 結局のところ、日付クラス、およびおそらく辞書クラスの最小値と最大値を定義することは理にかなっていますが、numeric_limitsそれらの使用を意図していない可能性があります (私はそれについてあまり経験がありません)。さらに、numeric_limits何を作ればいいのかわからない余分なメンバーと情報がたくさんあります。使わないnumeric_limits、クラスで使用可能な値の範囲を示すためにC++が提供する他のよく知られた/広く使用されているメカニズムは何ですか?

4

3 に答える 3

2

あなたの質問を理解するのに苦労しています。あなたが求めているのは、クラスのドメイン(クラスにフィードして意味をなすことができるデータ)について断定することが理にかなっているのかどうか、もしそうなら、どのように断定するのかということだと思います。

最初のものは非常に明確な答えを持っています:はい、絶対に。クラスを「...正しく使用するのは簡単で、間違って使用するのは難しい」ようにします。これには、クラスのクライアントが何か間違ったことをしたときに通知されていることを確認することも含まれます。

2番目の答えはあまり明確ではありません。多くの場合、assert()関数を使用して、関数またはクラスのドメインをアサートする必要があります。また、例外をスローしたい場合もあります。時々あなたは両方をしたいです。パフォーマンスが問題になる可能性がある場合は、どちらも行わないインターフェイスを提供したい場合があります。通常、クライアントがクラスまたは関数にフィードしようとする前に、有効/無効な入力を判断できるように、少なくともチェックできるインターフェイスを提供する必要があります。

アサートとスローの両方が必要な理由は、例外をスローするとスタック情報が破壊され、デバッグが困難になる可能性があるためですが、アサートはビルド中にのみ発生し、計算の実行やクラッシュを引き起こす可能性のあることからユーザーを保護するために実際には何もしません。またはデータを無効にします。したがって、多くの場合、アサートしてからスローすることが最良の答えであり、テスト中に遭遇したときにデバッグできますが、それらのバグが棚に到達したときにユーザーを保護します。

クラスでは、最小/最大を提供するいくつかの方法を検討できます。1つは、クラスのインターフェースで最小/最大関数を提供することです。もう1つは、外部機能を使用することです。そうです、範囲は数値の一種である場合があるため、numeric_limitsが問題になる場合があります。クラスにvalidate_input()関数を持つ、より汎用的なインターフェースを提供して、適切な比較を行うこともできます。

質問の2番目の部分には、個人の趣味を含む多くの変数に応じて、多くの有効な回答があります。

于 2010-05-20T17:36:53.187 に答える
2

スケジュール/スロット コードの設計者として、どの程度の柔軟性/実用性が必要かはあなた次第です。

2 つの簡単なアプローチは、そのクラスで独自の値を定義することです。

const long MIN_SLOT = 1;
const long MAX_SLOT = 999; // for example

または、定義を保持する別のクラスを定義します

class SchedLimits{

public:
const static long MIN_SLOT = 1;
const static long MAX_SLOT = 999;
}

最も単純なのは列挙型です。(思い出させてくれたコメンテーターに感謝)

enum {MIN_SLOT = 1, MAX_SLOT = 999};
于 2010-05-20T17:41:30.773 に答える
1

最小値と最大値を反映する const 静的メンバーをいくつか作成するだけです。

于 2010-05-20T17:35:54.953 に答える