テンプレートの参照渡し変換/型キャスト演算子 (const なし) を指定すると、次のことが可能になります。
class TestA
{
public:
//Needs to be a const return
template<typename TemplateItem>
operator TemplateItem&() const {TemplateItem A; A = 10; return A;}
};
int main()
{
TestA A;
{
int N;
N = A;
printf("%d!\n",N);
}
{
float N;
N = A;
printf("%f!\n",N);
}
return 0;
}
そして、次のコードが与えられます(const付き):
class TestA
{
public:
//Produces error
template<typename TemplateItem>
operator const TemplateItem&() const {TemplateItem A; A = 10; return A;}
};
次のエラーが発生します。
エラー: 代入で 'TestA' を 'int' に
変換できません エラー: 代入で 'TestA' を 'float' に変換できません
質問
変換/型キャスト演算子がテンプレート型の const 参照渡しを返すようにするにはどうすればよいですか?
環境
ほとんどの人が入ってきて、「何にも変換できない」とびっくりする前に、コンテキストが必要です。上記のコードは疑似コードです。テンプレート化された変換関数の落とし穴ではなく、可能な const 参照の戻りにのみ関心があります。しかし、それが何のためにあるのか疑問に思っているなら、それは比較的単純です:
TemplateClass -> 変換 (バイトデータに変換) -> ファイル
TemplateClass ← 変換 (バイトデータから元に戻す) ← ファイル
ユーザーは、何を取得しているのかを知っているか、自動化されていることが期待されます (IE の保存/読み込み状態)。はい、ポインタを使用して任意の型をバイトデータに変換するテンプレートの普遍的な方法があります。
そして、この種のことをすでに行っているstdについて私に拍手を与えないでください。変換プロセスは、より複雑なクラス ライブラリのセットアップの一部です。
私はプログラマーです。私を信じて。C++ は私を信頼し、間違いを許してくれます。私が学ぶ唯一の方法。