AからBにキャストするときは、コンストラクタやキャスト演算子を使用すると簡単です。しかし、あなたが "仲介人"を持つとき、3つ目の型はコンストラクタの初期化や、ある型を他の型と同じにしても機能しますが、関数呼び出しで渡すパラメータは機能しません。関数の呼び出し時に間接キャストがサポートされていませんか?
私の質問:これはC++でサポートされていないことですか、何か迷っていますか?以下のコードで私の3つのコメントを見てください。私はコメントアウトコードを使用している場合、私はうまくいく、確か
class StringOut
{
public:
char* ptr = nullptr;
StringOut() {}
operator char*() { return ptr; }
};
class StringIn
{
public:
char* ptr = nullptr;
StringIn() {}
StringIn(char* ptr) { StringIn::ptr = ptr; }
void operator=(char* ptr) { StringIn::ptr = ptr; }
//StringIn(StringOut& ptr) { StringIn::ptr = ptr.ptr; }
};
void ff1(StringIn strin)
{
}
void ff1(int a)
{
}
void ff()
{
StringOut strout;
StringIn strin = strout; // compiles
strin = strout; // compiles
ff1(strout); // doesn't compile
};
を(私はVS2015更新3のコンパイラを使用しています)。しかし、私の質問は、このような直接演算子が必要なのはC++の限界かどうかです。
確かにコンパイラは「コンパイルしない」以上のことを言っています。 –
コンストラクタの初期化で「仲介者」キャストが機能するというあなたの信念の根拠は何ですか?ここには何も示されていません。 – EJP
'StringIn strin = strout;'のようなコードは、コンストラクタ型の初期化であり、 'StringInstrin(strout);と同じです。 – Thomas