私がやろうとしているのは、他のすべてのプリミティブ型と同じように動作する新しいカスタムデータ型を作成することです。具体的には、このデータ型は固定小数点の分数のように見えます。このデータ型を表す「classFixedPoint」というクラスを作成しました。その中に、「FixedPoint」から「int」、「double」、「unsignedint」などに型キャストする方法があります。これで問題ありません。
さて、キャストしたい場合はどうなり"int" to "FixedPoint"
ますか?もともと私の解決策はコンストラクターを持つことでした:
FixedPoint(int i) { /* some conversion from 'int' to 'FixedPoint' in here */ }
これは機能します...しかし、次のようにユニオンに入れることはできません。
union {
FixedPoint p;
};
「FixedPoint」には暗黙の自明なコンストラクターがないため、これは機能しません(コンストラクター「FixedPoint(inti)」を定義しただけです)。
cast from some type T to type FixedPoint without explicitly defining a constructor
要約すると、全体の問題は「ユニオンでFixedPointタイプを使用できるようにしたい」ということです。
解決策はオンラインで証拠を見つけることができないと思います。「int」から「FixedPoint」にキャストするオーバーロードされたグローバル型キャスト演算子を定義します。
クラスコンストラクターを使用せずにこれを行う方法はありますか?このクラスをユニオンで使用できるようにしたいと思います。私が試したこと(グローバルスコープで):
operator (FixedPoint f, int a) { ... } //compiler complains about this is not a method or non-static.
そして、組合がコンストラクターを好まないことを示す小さな例(彼らはPODが好きです)
class bob
{
public:
bob(int a) { m_num = a; }
private:
int m_num;
};
void duck()
{
union
{
bob a;
};
}
VisualStudioで見られるこのエラーは次のとおりです。
error C2620: member 'duck::<unnamed-tag>::a' of union 'duck::<unnamed-tag>' has user-defined constructor or non-trivial default constructor
何か案は?ありがとう