テンプレート関数を実装する必要があります。テンプレート関数を実装すると、任意のコンストラクタを使用して任意のクラスのインスタンスを作成することができ、可能なパラメータはlvaluesとrvaluesの任意の組み合わせになります。 AとB - -任意のクラスインスタンスを作成するためのテンプレート関数を実装する方法は?
は、私は2つのクラス考えてみましょう次のとおりです。私は以下のようなものを実装しようとした
class A
{
public:
A(){}
};
class B
{
A& a1; // I want to be able to call non-constant methods and modify object
const A& a2; // This I need only as const member
int i; //can be initialized with a temporary object
public:
B(A& a1_, const A& a2_, int i_) : a(a_), a2(a2_), i(i_) {}
};
それだけで私は左辺値(名前付きオブジェクト)を使用できるようになると私は意志一時的なオブジェクトを渡すことはできません。 constキーワードを追加すると、問題が部分的に解決されますが、必要なオブジェクトを変更することができなくなります。
template <typename TType, typename ... TArgs>
TType create(TArgs&... args)
{
return TType(args...);
}
私はこのような機能 'を作成' を使用したい:
int main()
{
A a1;
A a2;
//function takes both lvalue and rvalue
B b = create<B>(a1, a2, 1);
}
を誰かが可能な解決策を提案してくださいもらえますか?
あなたが探している検索語は「完璧な転送」です。 –