C++ スライスの問題があります。私はC++を初めて使用するので、これができないことに気付くには愚かすぎるかもしれません....さまざまな回避策を試しましたが、現在の最善のアプローチは次のようになります。(非常に大規模なレガシー コード ベースで大量のインターフェイスを変更することを避けるために、このようなことを行う必要があります。これがエレガントなスタイルであるとは決して主張しません!!)
これをコンパイルするのに問題があります。アイデアは正しいですか?それとも、アプローチ全体が失敗する運命にあるのでしょうか? 参照のコンストラクターが問題のようです。私は Stroustrup の "C++ Programming Lanugage" (または少なくとも関連するセクションだと思っていたもの) を読みましたが、役に立ちませんでした。
class FOO {};
class FOOSUBCLASS : public FOO {
public:
FOOSUBCLASS(const int id = 0) : _id(id) {}
private:
int _id;
};
class BAR {
public:
BAR(const FOO foo) : _foo(foo), _realFoo(&_foo) { }
BAR(const FOOSUBCLASS foosc) : _foosc(foosc), _realFoo(&_foosc) {}
private:
FOO _foo;
FOOSUBCLASS _foosc;
FOO& _realFoo;
};
_realFoo(&_foo)
コンパイラは私の行を好きではありません。_foo
への参照を、クラスのメンバー変数からの参照にしたいのですが。それはC++では不可能ですか?
VS2005 からの特定のエラーは次のとおりです。
'initializing' : cannot convert from 'FOO *' to 'FOO &'