<t>

2017-02-07 6 views
2

をオブジェクトへのオブジェクト から変換し、我々はテンプレートクラスがあるとします。 <t>

class Object<T> 

、変数の1つのインスタンス:

Object<const IQuestion> qobj1(new Question()); 
Object<IQuestion> qobj2(new Question()); 

私は次のように機能areEqualに電話をしたいと思いますthis:

areEqual(question1, question2). 

functiを呼び出す方法on:

bool areEqual(const Object<IQuestion>& rhs, const Object<IQuestion>& rhs) const 

変数がわずかに異なると考えていますか?

これは、どういうわけかstatic_castまたはreinterpret_castで実現できるとします。

+3

「オブジェクト」と「オブジェクト」は、「X」と「Y」が完全に同じタイプでない限り、無関係なクラスとは異なります。あなたは2つの間で変換するための関数を作成する必要があります。おそらく 'Object 'を使用して停止してください。 –

+0

私は過負荷を提供することはできません。また、入力パラメータを制御することもできません。私はconst変数をクローンして、オブジェクトのもう一つのインスタンスを構築することができたと思います。 – ryzhiy

+0

新しいオーバーロード 'bool areEqual(const Object &lhs、const Object &rhs)const'を使用できるかどうかを確認してください。 –

答えて

1

以下は、おそらくあなたが探しているものと似たようなん:

template<typename T, typename U> 
std::enable_if_t<std::is_same<std::decay_t<T>, std::decay_t<U>>::value, bool> 
areEqual(const Object<T>& lhs, const Object<U>& rhs) { 
    // T and U are the same type, put aside cv qualifiers and references 
    // if you know what's a meaningful way to compare them, do that 
    // note that here T and U can still have different cv-qualifiers 
} 

coliruに最小限の作業例を参照してください。

関連する問題